Trouvez les voitures qui ont réussi tous les tests de la liste de tests
Cette tâche nécessite d'identifier les voitures du tableau « voitures » qui ont réussi tous les tests répertoriés dans le tableau « passedtest ». Bien qu'une simple instruction IN puisse récupérer les voitures qui réussissent n'importe quel test, l'exigence est de garantir que chaque voiture réussit tous tests de la liste.
Pour y parvenir, nous pouvons utiliser une combinaison d'agrégation (GROUP BY, HAVING) et de théorie des ensembles.
Solution :
<code class="language-sql">SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname);</code>
Explication :
Pour inclure les données de la table "cars", vous pouvez utiliser l'instruction interne :
<code class="language-sql">SELECT * FROM cars WHERE carname IN ( SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname) );</code>
Alternative :
Une autre option consiste à utiliser l'opération JOIN :
<code class="language-sql">SELECT DISTINCT c.carname FROM cars c JOIN PassedTest pt ON c.carname = pt.carname GROUP BY c.carname HAVING COUNT(*) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname);</code>
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!