sql >> Base de Datos >  >> RDS >> Mysql

Cómo contar los resultados de MySQL en una relación has-many-through

Probablemente el más simple, limpio y rápido para solo dos estudiantes :

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;

No necesitas unirte al student tabla para esto en absoluto - tan pronto como sepa la lista de stud_id te interesa.

Para cualquier número de estudiantes , la consulta de Martin es más conveniente. Puedes simplificar de manera similar:

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;

Requiere que (stud_id, club_id) es único, por supuesto, y los elementos de la lista también son únicos.