Dit udtryk i en WHERE-sætning virker mod en enkelt række af det samlede resultatsæt. Det er derfor WHERE category_id = 201 AND category_id = 202
virker ikke -- fordi det ikke kan være to værdier på en enkelt række.
Så du har brug for en måde at forbinde to rækker fra tabellen til en række i resultatsættet. Du kan gøre dette med en selvtilmelding :
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
Denne teknik er svær at skalere op, når du vil søge efter tre, fire, fem eller flere værdier, fordi den kræver N-1 joins for at matche N værdier.
Så en anden metode er at bruge 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
Begge teknikker er okay og fungerer bedre under forskellige omstændigheder.