sql >> Database >  >> RDS >> Mysql

MySQL Selecteer ID's die voorkomen op verschillende rijen met meerdere specifieke waarden voor een kolom

Uw expressie in een WHERE-component werkt tegen een enkele rij van de samengevoegde resultatenset. Daarom WHERE category_id = 201 AND category_id = 202 werkt niet -- omdat het niet twee waarden op een enkele rij kunnen zijn.

U hebt dus een manier nodig om twee rijen uit de tabel samen te voegen tot één rij van de resultatenset. U kunt dit doen met een self-join :

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

Deze techniek is moeilijk op te schalen als u naar drie, vier, vijf of meer waarden wilt zoeken, omdat er N-1 voor nodig is voegt zich bij N waarden.

Een andere methode is dus om GROUP BY te gebruiken:

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 technieken zijn oké en werken beter in verschillende omstandigheden.



  1. Niet-Gregoriaanse datums opslaan in het datumtype van Mysql

  2. Server Side Events met PHP &MySQL

  3. Levenshtein:MySQL + PHP

  4. Reset MySQL-rootwachtwoord met behulp van de instructie ALTER USER na installatie op Mac