Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Select IDs que ocorrem em linhas diferentes com vários valores específicos para uma coluna


Sua expressão em uma cláusula WHERE funciona em uma única linha do conjunto de resultados combinado. É por isso que WHERE category_id = 201 AND category_id = 202 não funciona -- porque não pode haver dois valores em uma única linha.

Portanto, você precisa de alguma maneira de unir duas linhas da tabela em uma linha do conjunto de resultados. Você pode fazer isso com uma auto-junção :
SELECT c1.item_id
FROM item_category AS c1
INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id
WHERE c1.category_id = 201 AND c2.category_id = 202

Essa técnica é difícil de aumentar quando você deseja pesquisar três, quatro, cinco ou mais valores, porque requer N-1 junções para corresponder a N valores.

Então, outro método é usar GROUP BY:
SELECT c.item_id, COUNT(*) AS cat_count
FROM item_category AS c
WHERE c.category_id IN (201,202)
GROUP BY c.item_id
HAVING cat_count = 2

Ambas as técnicas são boas e funcionam melhor em diferentes circunstâncias.