Как написать «не в ()» sql-запрос с использованием join

Может кто-нибудь, пожалуйста, укажите, как написать следующий sql-запрос, используя объединения. Я не хочу, чтобы использование не было так хорошо, как если бы я хотел бы заменить условие.

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

Я использую SQL Server 2008

Эта статья:

  • NOT IN vs. NOT EXISTS против LEFT JOIN / IS NULL: SQL Server

может быть, если вы заинтересованы.

В нескольких словах этот запрос:

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

будет работать, но он менее эффективен, чем конструкция NOT NULL (или NOT EXISTS ).

Вы также можете использовать это:

 SELECT short_code FROM domain1 EXCEPT SELECT short_code FROM domain2 

Это не использует ни NOT IN ни WHERE (и даже нет объединений!), Но это удалит все дубликаты на domain1.short_code если таковые имеются.

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

В этом случае я бы выбрал NOT EXISTS .

 SELECT D1.ShortCode FROM Domain1 D1 WHERE NOT EXISTS (SELECT 'X' FROM Domain2 D2 WHERE D2.ShortCode = D1.ShortCode ) 
Давайте будем гением компьютера.