Maison >base de données >tutoriel mysql >Pourquoi ma requête MySQL « NOT IN » échoue-t-elle et comment puis-je y remédier ?
Dépannage d'une erreur de requête MySQL "NOT IN"
Un utilisateur a récemment rencontré une erreur de syntaxe en tentant une requête MySQL apparemment simple. L'objectif était de sélectionner toutes les lignes de Table1
où la valeur de la colonne principal
n'est pas présente dans Table2
. La requête initiale incorrecte était :
<code class="language-sql">SELECT * FROM Table1 WHERE Table1.principal NOT IN Table2.principal</code>
Cela a généré une erreur, amenant l'utilisateur à croire que MySQL pourrait ne pas prendre en charge les clauses NOT IN
, sur la base de conseils en ligne contradictoires. Certaines sources ont suggéré des solutions de contournement complexes.
Cependant, MySQL supporte NOT IN
, mais la syntaxe utilisée ci-dessus était défectueuse. La syntaxe correcte nécessite une sous-requête :
<code class="language-sql">SELECT * FROM Table1 WHERE Table1.principal NOT IN (SELECT principal FROM Table2)</code>
Cette requête révisée utilise une sous-requête (SELECT principal FROM Table2)
pour définir explicitement l'ensemble de valeurs principal
de Table2
. MySQL compare ensuite correctement chaque Table1.principal
valeur à cet ensemble, renvoyant uniquement les lignes pour lesquelles une correspondance n'est pas trouvée.
L'erreur d'origine provenait uniquement d'une application incorrecte de l'opérateur NOT IN
. L'inclusion de la sous-requête fournit la structure nécessaire pour que la base de données exécute la requête avec succès et produise les résultats attendus.
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!