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 ?

Comment sélectionner les enregistrements du tableau 2 en excluant ceux dont les noms correspondent dans le tableau 1 ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-19 16:46:15634parcourir

How to Select Records from Table2 Excluding Those with Matching Names in Table1?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn