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

MySQL Vælg ID'er, der forekommer på forskellige rækker med flere specifikke værdier for en kolonne

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.



  1. Escape-værdier i SQL-forespørgsler (C# med SQL-forbindelse)

  2. Kopier værdier fra en kolonne til en anden i samme tabel

  3. Optimer MySQL/MariaDB-ydeevnen med MySQLTunner-værktøjet

  4. Sådan opretter du PL/SQL svag ref-markør i Oracle-databasen