Ce guide montre comment récupérer les étudiants appartenant à des clubs spécifiques à l'aide de la relation has-many-through de SQL. Nous supposerons trois tables : student
, club
et student_club
(la table de jointure). Le but est de trouver des étudiants membres à la fois du club de football (ID 30) et du club de baseball (ID 50).
La solution utilise une requête SQL concise et efficace :
<code class="language-sql">SELECT DISTINCT s.id, s.name FROM student s JOIN student_club sc ON s.id = sc.student_id WHERE sc.club_id = 30 AND s.id IN (SELECT student_id FROM student_club WHERE club_id = 50);</code>
Cette requête exploite une sous-requête pour des performances optimales. Décomposons-le :
JOIN
Clause : Les tables student
et student_club
sont jointes à l'aide du student_id
pour relier les étudiants à leurs adhésions à un club.
WHERE
Clause : Cette clause filtre les résultats. La première condition (sc.club_id = 30
) garantit que nous ne prenons en compte que les étudiants du club de football. La deuxième condition (s.id IN (...)
) utilise une sous-requête pour affiner davantage les résultats, en incluant uniquement les étudiants dont les identifiants sont également présents dans la table student_club
du club de baseball (club_id = 50).
Cette approche évite une complexité inutile et utilise efficacement les index de base de données (s'ils sont disponibles sur les colonnes student_id
et club_id
) pour récupérer rapidement les résultats souhaités, même avec des ensembles de données étendus. Le mot-clé DISTINCT
garantit que chaque élève n'est répertorié qu'une seule fois, même s'il a plusieurs entrées dans le tableau student_club
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!