Mysql
 sql >> Database >  >> RDS >> Mysql

Come contare i risultati di MySQL in una relazione ha-molti-attraverso

Probabilmente il più semplice, il più pulito e il più veloce per soli due studenti :

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;

Non è necessario iscriversi allo student table per questo - non appena conosci l'elenco di stud_id ti interessa.

Per qualsiasi numero di studenti , la query di Martin è più conveniente. Puoi semplificare in modo simile:

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;

Richiede che (stud_id, club_id) è unico ovviamente, e anche gli elementi dell'elenco sono unici.