Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Select-IDs, die in verschiedenen Zeilen mit mehreren spezifischen Werten für eine Spalte vorkommen

Ihr Ausdruck in einer WHERE-Klausel arbeitet mit einer einzelnen Zeile der verknüpften Ergebnismenge. Deshalb WHERE category_id = 201 AND category_id = 202 funktioniert nicht -- weil es nicht zwei Werte in einer einzigen Zeile sein können.

Sie brauchen also eine Möglichkeit, zwei Zeilen aus der Tabelle zu einer Zeile der Ergebnismenge zu verbinden. Sie können dies mit einem Selbstbeitritt tun :

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

Diese Technik lässt sich nur schwer skalieren, wenn Sie nach drei, vier, fünf oder mehr Werten suchen möchten, da sie N-1 erfordert verbindet sich mit N Werte.

Eine andere Methode ist also die Verwendung von 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

Beide Techniken sind in Ordnung und funktionieren unter verschiedenen Umständen besser.