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

Sådan tælles MySQL resulterer i en har-mange-gennem-relation

Sandsynligvis den enkleste, reneste og hurtigste for kun to 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 ikke at slutte dig til student tabel for dette overhovedet - så snart du kender listen over stud_id du er interesseret i.

For et vilkårligt antal elever , Martins forespørgsel er mere praktisk. Du kan forenkle på en lignende måde:

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 det (stud_id, club_id) er selvfølgelig unik, og at listeelementer også er unikke.



  1. Fejlkode:1406. Data for lange til kolonne - MySQL

  2. Find hele træet fra roden, der giver en hvilken som helst knude

  3. Laravel Eloquent vs query Builder - Hvorfor bruge veltalende for at reducere ydeevnen

  4. Sådan opretter du et beregnet felt i Access