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

skrzyżowania wiele-do-wielu i wiele-do-wielu

Gdybym miał rozwiązać problem, połączę cztery tabele z ich kolumną łączącą (w szczególności klucze obce ), a następnie podzapytanie w HAVING klauzula o liczeniu ilości pozycji na liście dla każdej osoby. Spróbuj,

SET @personID := 1;

SELECT  c.name
FROM    Inventory a
        INNER JOIN Foods b
            ON a.food_id = b.id
        INNER JOIN Stores c
            ON a.store_id = c.id
        INNER JOIN Lists d
            ON d.food_id = b.id
WHERE   d.person_id = @personID
GROUP BY c.name
HAVING   COUNT(DISTINCT d.food_id) =
     (
        SELECT COUNT(*)
        FROM Lists
        WHERE person_ID = @personID
     )

Pokaz SQLFiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:jak uporządkować według pola, jeśli nie jest null, w przeciwnym razie użyj innego pola?

  2. Różnica między BINARY(16) a CHAR(32) podczas przechowywania MD5 w bazie danych

  3. Mysql - połącz się ze zdalnym serwerem za pomocą adresu IP

  4. Jakie uprawnienia są wymagane w MySQL do uruchomienia wyzwalacza?

  5. Liczba wstawionych i zaktualizowanych rekordów MYSQL