sql >> Databasteknik >  >> RDS >> Mysql

Hur man räknar MySQL resulterar i en har-många-genom-relation

Förmodligen enklast, renaste och snabbaste för bara två elever :

SELECT count(*) AS ct
FROM   student_club x
JOIN   student_club y USING (stud_id)
WHERE  x.club_id = 30
AND    y.club_id = 50;

Du behöver inte gå med i student tabell för detta överhuvudtaget - så snart du känner till listan över stud_id du är intresserad av.

För valfritt antal elever , Martins fråga är bekvämare. Du kan förenkla på liknande sätt:

SELECT count(*) AS ct
FROM (
   SELECT stud_id
   FROM   student_club
   WHERE  club_id IN (30, 50)
   GROUP  BY 1
   HAVING count(*) = 2 -- adapt to number of items in list
   ) x;

Kräver att (stud_id, club_id) är unikt såklart, och listobjekten är också unika.



  1. Guide till designdatabas för nyhetsbrev i MySQL

  2. Filtrera rader baserat på värden i flera JSONB-kolumner

  3. Använda MyRocks Storage Engine med MariaDB Server

  4. Aktiverar TLS i R12.1