web-dev-qa-db-fra.com

Comment écrire une requête SQL «pas dans ()» en utilisant join

Quelqu'un pourrait-il s'il vous plaît fournir comment écrire la requête SQL suivante à l'aide de jointures. Je ne veux pas utiliser pas dans aussi bien que possible, je voudrais aussi remplacer condition.

SELECT d1.Short_Code
FROM domain1 d1
WHERE d1.Short_Code NOT IN (
  SELECT d2.Short_Code
  FROM Domain2 d2
)

J'utilise SQL Server 2008

42
Elangesh

Cet article:

peut être si vous intéresse.

En quelques mots, cette requête:

SELECT  d1.short_code
FROM    domain1 d1
LEFT JOIN
        domain2 d2
ON      d2.short_code = d1.short_code
WHERE   d2.short_code IS NULL

fonctionnera mais il est moins efficace qu'un NOT NULL (ou NOT EXISTS) construire.

Vous pouvez également utiliser ceci:

SELECT  short_code
FROM    domain1
EXCEPT
SELECT  short_code
FROM    domain2

Cela n'utilise ni NOT IN ni WHERE (et même pas de jointures!), mais cela supprimera tous les doublons sur domain1.short_code si seulement.

61
Quassnoi
SELECT d1.Short_Code 
FROM domain1 d1
LEFT JOIN domain2 d2
ON d1.Short_Code = d2.Short_Code
WHERE d2.Short_Code IS NULL
14
Aducci

J'opterais pour NOT EXISTS dans ce cas.

SELECT D1.ShortCode
FROM Domain1 D1
WHERE NOT EXISTS
    (SELECT 'X'
     FROM Domain2 D2
     WHERE D2.ShortCode = D1.ShortCode
    )
4
Rob Paller