我有以下表架构:
book_id | attribute_id | attribute_value
____________________________________________________
1 | 35 | Sci-Fi
2 | 35 | Drama
3 | 35 | Thriller
4 | 35 | Romance
1 | 36 | Author1
2 | 36 | Author2
3 | 36 | Author3
4 | 36 | Author4
1 | 37 | $300
2 | 37 | $100
3 | 37 | $600
4 | 37 | $700
我试图从表'books'中获取具有多个条件的结果,例如下面的查询
SELECT book_id FROM books WHERE attribute_id = 35 AND attribute_value IN ('Drama', 'Thriller') AND attribute_id = 36 AND attribute_value IN ('Author2')
我知道这不起作用,因为我不能在同一列上有多个 AND 条件。我正在寻找上面查询的以下输出
book_id |
-------- |
2 |
我尝试使用 UNION 并将查询分隔为 2 个不同的查询:
SELECT book_id FROM books WHERE attribute_id = 35 AND attribute_value IN ('Drama', 'Thriller')
UNION
SELECT book_id FROM books WHERE attribute_id = 36 AND attribute_value IN ('Author2')
但显然这返回的结果与使用下面的查询相同(将AND替换为OR
SELECT book_id FROM books WHERE (attribute_id = 35 AND attribute_value IN ('Drama', 'Thriller')) OR (attribute_id = 36 AND attribute_value IN ('Author2'))
我在这些条件下尝试了 INNER JOINING 表,但没有成功。不知道我错过了什么。我正在寻找一种不仅可以使用更多属性的解决方案 2 (35,36)。有任何想法吗?