Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment compter les résultats de MySQL dans une relation has-many-through

Probablement le plus simple, le plus propre et le plus rapide pour seulement deux étudiants :

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;

Vous n'avez pas besoin de rejoindre l'student table pour cela - dès que vous connaissez la liste des stud_id vous intéresse.

Pour n'importe quel nombre d'étudiants , la requête de Martin est plus pratique. Vous pouvez simplifier de la même manière :

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;

Nécessite que (stud_id, club_id) est unique bien sûr, et que les éléments de la liste sont également uniques.