Vérifier si une colonne contient TOUTES les valeurs d'une autre colonne dans une base de données MySQL
Considérons deux tables, T1 et T2, avec ce qui suit structures :
T1 :
personID | stuffID |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
1 | 4 |
2 | 1 |
2 | 4 |
3 | 1 |
3 | 2 |
T2 :
stuffID |
---|
1 |
2 |
3 |
Le but est de récupérer toutes les valeurs personID de T1 qui sont associés à chaque valeur stuffID dans T2. Pour cet exemple, le résultat serait 1 car seul personID 1 possède des enregistrements pour les trois stuffID présents dans T2.
Solution :
Pour y parvenir, nous pouvons utiliser un processus en deux étapes :
Étape 1 : Identifier la correspondance records
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2)
Cette sous-requête récupère toutes les valeurs personID de T1 qui ont au moins un stuffID correspondant dans T2.
Étape 2 : Vérifier l'exhaustivité
GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
Cette partie regroupe les résultats de l'étape 1 par personID et vérifie si le nombre de valeurs stuffID distinctes pour chacun group est égal au nombre de valeurs stuffID dans T2. Si tel est le cas, cela indique que personID est associé à toutes les valeurs stuffID de T2.
Requête finale :
En combinant les deux étapes, la requête finale pour vérifier si une colonne contient toutes les valeurs d'une autre colonne dans MySQL sont :
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2) GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
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!