Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Select ID che si trovano su righe diverse con più valori specifici per una colonna

La tua espressione in una clausola WHERE funziona su una singola riga del set di risultati unito. Ecco perché WHERE category_id = 201 AND category_id = 202 non funziona, perché non possono essere due valori su una singola riga.

Quindi hai bisogno di un modo per unire due righe della tabella in una riga del set di risultati. Puoi farlo con un partecipazione automatica :

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

Questa tecnica è difficile da scalare quando vuoi cercare tre, quattro, cinque o più valori, perché richiede N-1 si unisce per corrispondere a N valori.

Quindi un altro metodo è usare 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

Entrambe le tecniche vanno bene e funzionano meglio in circostanze diverse.