sql >> Databasteknik >  >> RDS >> Mysql

MySQL Välj ID:n som förekommer på olika rader med flera specifika värden för en kolumn

Ditt uttryck i en WHERE-sats fungerar mot en enkel rad av den sammanslagna resultatuppsättningen. Det är därför WHERE category_id = 201 AND category_id = 202 fungerar inte -- eftersom det inte kan vara två värden på en enda rad.

Så du behöver ett sätt att sammanfoga två rader från tabellen till en rad i resultatuppsättningen. Du kan göra detta med en självanslutning :

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

Den här tekniken är svår att skala upp när du vill söka efter tre, fyra, fem eller fler värden, eftersom den kräver N-1 går med för att matcha N värden.

Så en annan metod är att använda 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

Båda teknikerna är okej och fungerar bättre under olika omständigheter.



  1. Hur man binder datatabell till reportviewer körtid

  2. En fastighetsbyrådatamodell

  3. Från lagrad procedur, returnera OUT-parameter &OUT-markör &analysresultat (Oracle)

  4. Hur man använder DELETE ON CASCADE på många-till-en relation