sql - valeurs - Comment sélectionner tous les enregistrements d'une table qui n'existent pas dans une autre table?




trouver valeurs d'une table n'existant pas dans une autre table (6)

C'est la théorie des ensembles purs que vous pouvez réaliser avec l'opération minus .

select id, name from table1
minus
select id, name from table2

table1 (identifiant, nom)
table2 (identifiant, nom)

Question:

SELECT name   
FROM table2  
-- that are not in table1 already

Ce travail aiguisé pour moi

SELECT * 
FROM [dbo].[table1] t1
LEFT JOIN [dbo].[table2] t2 ON t1.[t1_ID] = t2.[t2_ID]
WHERE t2.[t2_ID] IS NULL

Méfiez-vous des pièges. Si le champ Name de Table1 contient des Nuls, vous avez des surprises. Mieux vaut:

SELECT name
FROM table2
WHERE name NOT IN
    (SELECT ISNULL(name ,'')
     FROM table1)

Voici ce qui a fonctionné le mieux pour moi.

SELECT *
FROM @T1
EXCEPT
SELECT a.*
FROM @T1 a
JOIN @T2 b ON a.ID = b.ID

C'était plus de deux fois plus rapide que toute autre méthode que j'ai essayée.


SELECT name
FROM table2
WHERE name NOT IN
    (SELECT name 
     FROM table1)

ou

SELECT name 
FROM table2 
WHERE NOT EXISTS 
    (SELECT * 
     FROM table2 
     WHERE table1.name = table2.name)

Voir cette question pour 3 techniques pour accomplir ceci


SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

Q : Que se passe-t-il ici?

R : Conceptuellement, nous sélectionnons toutes les lignes de la table1 et pour chaque ligne, nous essayons de trouver une ligne dans la table2 avec la même valeur pour la colonne de name . S'il n'y a pas de ligne, nous laissons la partie table2 de notre résultat vide pour cette ligne. Ensuite, nous limitons notre sélection en sélectionnant uniquement les lignes du résultat où la ligne correspondante n'existe pas. Enfin, nous ignorons tous les champs de notre résultat à l'exception de la colonne name (celle dont nous sommes sûrs, de table1 ).

Bien que ce ne soit pas la méthode la plus performante possible dans tous les cas, cela devrait fonctionner dans pratiquement tous les moteurs de bases de données qui tentent d'implémenter ANSI 92 SQL.





tsql