Tenho o seguinte esquema de tabela:
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
Tentei buscar resultados com várias condições, como na consulta abaixo, da tabela 'livros'
SELECT book_id FROM books WHERE attribute_id = 35 AND attribute_value IN ('Drama', 'Thriller') AND attribute_id = 36 AND attribute_value IN ('Author2')
Eu sei que isso não está funcionando porque não posso ter várias condições AND na mesma coluna. Eu estava procurando a seguinte saída da consulta acima
book_id |
-------- |
2 |
Tentei usar UNION e separar a consulta em 2 consultas diferentes:
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')
Mas obviamente isso está retornando os mesmos resultados usando a consulta abaixo (substituindo AND por 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'))
Tentei INNER JOIING na mesa nessas condições e não tive sucesso. Não tenho certeza do que estou perdendo. Estou procurando uma solução que funcione com mais atributos não apenas 2 (35,36). Alguma ideia?
Dependendo do que você precisa
ou
Você também pode adicionar
em ambas as consultas (isto não é erro de impressão!). Isso diminuirá a quantidade de registros agrupados usando o índice, se existir, mas adicionará a classificação de arquivos. Se o índice não existir, é preferível adicionar as condições.