sql >> Databáze >  >> RDS >> Mysql

MySQL Select ID, která se vyskytují na různých řádcích s více specifickými hodnotami pro sloupec

Váš výraz v klauzuli WHERE funguje proti jednomu řádku ze spojené výsledkové sady. Proto WHERE category_id = 201 AND category_id = 202 nefunguje -- protože na jednom řádku nemohou být dvě hodnoty.

Takže potřebujete nějaký způsob, jak spojit dva řádky z tabulky do jednoho řádku sady výsledků. Můžete to udělat pomocí vlastního připojení :

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

Tuto techniku ​​je těžké zvětšit, když chcete hledat tři, čtyři, pět nebo více hodnot, protože vyžaduje N-1 se připojí, aby odpovídal N hodnoty.

Další metodou je tedy použití 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

Obě techniky jsou v pořádku a fungují lépe za různých okolností.



  1. Práce se speciálními znaky plného textu MySQL

  2. Jak vyřešit chybu `prisma/klient se ještě neinicializoval` na Vercelu

  3. PLS-00428:V tomto příkazu SELECT se očekává klauzule INTO

  4. Nelze VYBRAT z klauzule UPDATE RETURNING v postgresu