Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Изберете идентификатори, които се срещат на различни редове с множество специфични стойности за колона

Вашият израз в клауза WHERE работи срещу единичен ред от обединения набор от резултати. Ето защо WHERE category_id = 201 AND category_id = 202 не работи -- защото не може да има две стойности на един ред.

Така че имате нужда от някакъв начин да обедините два реда от таблицата в един ред от набора от резултати. Можете да направите това ссамоприсъединяване :

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

Тази техника е трудна за увеличаване, когато искате да търсите три, четири, пет или повече стойности, защото изисква N-1 присъединява, за да съответства на N стойности.

Така че друг метод е да използвате 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

И двете техники са наред и работят по-добре при различни обстоятелства.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изтрийте мястото, където идентификаторът е най-голям

  2. com.mysql.jdbc.PacketTooBigException

  3. Синтаксис на SQL DROP DATABASE – Изброен от СУБД

  4. Функция MySQL ATAN2() – Връща дъговата тангенс на 2 стойности

  5. Mysql Рекурсивна съхранена процедура...Достигна лимит 0...не мога да променя променливата max_sp_recursion_depth