sql >> Database >  >> RDS >> Mysql

Hoe MySQL-resultaten te tellen in een heeft-veel-door-relatie

Waarschijnlijk de eenvoudigste, schoonste en snelste voor slechts twee studenten :

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;

Je hoeft niet lid te worden van de student tabel hiervoor helemaal niet - zodra u de lijst met stud_id . kent waarin u geïnteresseerd bent.

Voor willekeurig aantal studenten , Martin's vraag is handiger. U kunt op een vergelijkbare manier vereenvoudigen:

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;

Vereist dat (stud_id, club_id) is natuurlijk uniek, en die lijstitems zijn ook uniek.



  1. Hoe twee door komma's gescheiden tekenreekslijsten te vergelijken met MySQL

  2. Kan geen verbinding maken met MySQL-serverfout 111

  3. protocolpakketten niet in orde

  4. MySQL moet de kolom NIET UNIEK maken. Fout Kan 'Kolomnaam' niet DROPPEN, controleer of kolom/sleutel bestaat