T-SQL: вопрос о НЕ В - PullRequest
       21

T-SQL: вопрос о НЕ В

1 голос
/ 28 октября 2010

Почему эти запросы возвращают результаты различий:

SELECT * 
  FROM ProjectStatus PS 
 WHERE 0 = (SELECT COUNT(*) 
              FROM Project P 
             WHERE P.ProjectStatusKey = PS.ProjectStatusKey)

SELECT * 
  FROM ProjectStatus PS 
 WHERE PS.ProjectStatusKey NOT IN (SELECT P.ProjectStatusKey 
                                     FROM Project P)

Ответы [ 2 ]

3 голосов
/ 28 октября 2010

Тьфу.Оказывается, это NULL в списке опций, который ломает всю эту чертову штуку.Вы должны либо отключить ANSI NULL, либо изменить запрос на этот ...

SELECT * FROM ProjectStatus PS WHERE 
    PS.ProjectStatusKey NOT IN (SELECT P.ProjectStatusKey FROM Project P WHERE P.ProjectStatusKey IS NOT NULL)
0 голосов
/ 28 октября 2010

Если какое-либо из ваших значений Project.ProjectStatusKey имеет значение NULL, то предложение NOT IN будет также иметь значение NULL вместо TRUE / FALSE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...