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

Klauzula równoważna MySQL ONLY IN()

ten problem nazywa się Relational Division

SELECT boy_id 
FROM   boys_chocolates 
WHERE  chocolate_id IN ('$string')
GROUP  BY boy_id 
HAVING COUNT(DISTINCT chocolate_id) = ? -- <<== number of chocolates specified

przykład:

SELECT boy_id 
FROM   boys_chocolates 
WHERE  chocolate_id IN (1,2,3,4)
GROUP  BY boy_id 
HAVING COUNT(DISTINCT chocolate_id) = 4

jeśli jednak chocolate_id jest unikalny dla każdego boy_id , DISTINCT słowo kluczowe jest opcjonalne.

SELECT boy_id 
FROM   boys_chocolates 
WHERE  chocolate_id IN (1,2,3,4)
GROUP  BY boy_id 
HAVING COUNT(*) = 4

AKTUALIZACJA 1

...chcę wybrać ze stołu chłopców, którzy mają dokładnie te czekoladki, o których wspominam. Nie więcej nie mniej...

SELECT boy_id 
FROM   boys_chocolates a
WHERE  chocolate_id IN (1,2,3,4) AND
        EXISTS 
        (
            SELECT  1
            FROM    boys_chocolates b
            WHERE   a.boy_ID = b.boy_ID
            GROUP   BY boy_id
            HAVING  COUNT(DISTINCT chocolate_id) = 4
        )
GROUP  BY boy_id
HAVING COUNT(*) = 4



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Powtarzające się zapytania MySQL z Pythona zwracają te same dane

  2. Błąd 1046 Nie wybrano bazy danych, jak rozwiązać?

  3. jak uzyskać szczegóły z wielu tabel?

  4. Łączenie dwóch podobnych tabel w MySQL

  5. Jak zresetować zapomniane hasło roota MySQL?