Maison >base de données >tutoriel mysql >Comment sélectionner les enregistrements du tableau 2 en excluant ceux dont les noms correspondent dans le tableau 1 ?
Sélectionner dans une table pour exclure des enregistrements d'une autre table
Question :
Étant donné deux tables, la table1 contient l'identifiant et le nom des colonnes, la table2 contient l'identifiant et le nom des colonnes, récupère toutes les lignes de la table2 dont la valeur du nom n'est pas dans la table1.
Requête suggérée (incorrecte) :
<code class="language-sql">SELECT name FROM table2 -- that are not in table1 already</code>
Solution :
Une requête plus précise pour obtenir les résultats souhaités est :
<code class="language-sql">SELECT t2.name FROM table2 t2 LEFT JOIN table1 t1 ON t1.name = t2.name WHERE t1.name IS NULL;</code>
Explication :
Cette requête utilise une jointure gauche pour faire correspondre chaque ligne de la table2 à la ligne correspondante de la table1 en fonction de la colonne de nom. Si une ligne correspondante n'est pas trouvée dans la table1, la valeur t1.name de cette ligne dans les résultats sera NULL. En sélectionnant uniquement les lignes où t1.name est NULL, nous excluons effectivement les enregistrements de la table2 qui ont des valeurs de nom correspondantes dans la table1. Alternativement, la clause NOT EXISTS
peut être utilisée pour obtenir le même résultat :
<code class="language-sql">SELECT name FROM table2 t2 WHERE NOT EXISTS ( SELECT 1 FROM table1 t1 WHERE t1.name = t2.name );</code>
La version NOT EXISTS
est généralement plus efficace que la version LEFT JOIN
, notamment sur les grands ensembles de données.
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!