Maison >base de données >tutoriel mysql >Comment puis-je sélectionner les voitures qui ont réussi tous les tests dans une liste à l'aide de SQL ?
Filtrer les lignes qui correspondent à tous les éléments de la liste
Supposons que vous ayez deux tableaux, "voitures" et "passedtest", et que vous ayez besoin d'un moyen d'identifier les voitures qui ont réussi un ensemble spécifique de tests. Le tableau « passedtest » enregistre les tests réussis par chaque véhicule.
Une façon d'y parvenir est d'utiliser une instruction IN. Cependant, cette méthode peut ne pas fournir les résultats souhaités car elle renvoie des voitures qui réussissent même l'un des tests de la liste spécifiée. Pour faire correspondre toutes les valeurs de la liste dans toutes les lignes, une autre solution est nécessaire.
La requête SQL suivante utilise les clauses GROUP BY et HAVING pour accomplir cette tâche :
<code class="language-sql">SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4</code>
Cette requête regroupe d'abord les lignes de la table "passedtest" par la colonne "carname". Il utilise ensuite la fonction COUNT(DISTINCT) pour calculer le nombre de valeurs « testtype » distinctes pour chaque véhicule. La clause HAVING est utilisée pour filtrer les résultats afin de sélectionner uniquement les voitures avec un nombre de types de tests différents égal à 4 (en supposant qu'il y ait quatre tests dans la liste).
Vous pouvez également utiliser les résultats de cette requête comme une instruction imbriquée pour extraire des informations supplémentaires de la table "cars" :
<code class="language-sql">SELECT * FROM cars WHERE carname IN ( SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4 )</code>
Cette requête étendue récupérera toutes les données pertinentes de la table « voitures » pour les véhicules répondant aux critères spécifiés.
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!