Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL Select ID qui se produisent sur différentes lignes avec plusieurs valeurs spécifiques pour une colonne

Votre expression dans une clause WHERE fonctionne sur une ligne unique du jeu de résultats joint. C'est pourquoi WHERE category_id = 201 AND category_id = 202 ne fonctionne pas -- car il ne peut pas y avoir deux valeurs sur une seule ligne.

Vous avez donc besoin d'un moyen de joindre deux lignes de la table en une seule ligne du jeu de résultats. Vous pouvez le faire avec une auto-jointure :

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

Cette technique est difficile à mettre à l'échelle lorsque vous souhaitez rechercher trois, quatre, cinq valeurs ou plus, car elle nécessite N-1 se joint pour correspondre à N valeurs.

Une autre méthode consiste donc à utiliser 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

Les deux techniques sont acceptables et fonctionnent mieux dans des circonstances différentes.