Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Identyfikatory MySQL Select, które występują w różnych wierszach z wieloma określonymi wartościami dla kolumny

Twoje wyrażenie w klauzuli WHERE działa na pojedynczy wiersz połączonego zestawu wyników. Dlatego WHERE category_id = 201 AND category_id = 202 nie działa - ponieważ nie może być dwóch wartości w jednym wierszu.

Potrzebujesz więc sposobu, aby połączyć dwa wiersze z tabeli w jeden wiersz zestawu wyników. Możesz to zrobić za pomocą samodołączenia :

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

Ta technika jest trudna do skalowania, gdy chcesz wyszukać trzy, cztery, pięć lub więcej wartości, ponieważ wymaga N-1 łączy, aby dopasować N wartości.

Więc inną metodą jest użycie 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

Obie techniki są w porządku i działają lepiej w różnych okolicznościach.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego blokowanie na poziomie tabeli jest lepsze niż blokowanie na poziomie wiersza w przypadku dużych tabel?

  2. Łączenie warunku z dwóch kolumn mysql

  3. dodanie pakietu RMySQL do R nie powiodło się (w systemie Windows)?

  4. Zapisywanie znacznika czasu w tabeli mysql za pomocą php

  5. jak uzyskać różne wiersze o maksymalnej wartości