为什么在此选择查询中未选择任何内容?

Dav*_*ave 1 sql sql-server-2008-r2

如果我跑

Select distinct CompanyID from Device 
Run Code Online (Sandbox Code Playgroud)

我得到6排.如果我跑

Select CompanyID from Company
Run Code Online (Sandbox Code Playgroud)

我得到了8441行.如果我运行以下内容:

如果我跑

Select CompanyID
from Company where CompanyID NOT IN 
( 
   Select distinct CompanyID from Device
)
Run Code Online (Sandbox Code Playgroud)

我应该让那些不在原始选择声明中的8435家公司,对吗?

但是,当我运行它时,我得到0行.这是什么问题?上述6个结果中的一个是null,但这无关紧要.

谢谢!

编辑:有了Marc-s的帮助,我能够得到以下声明成为我需要的东西,我仍然觉得这个查询还有一个额外的步骤,有人想加入这个吗?

DELETE from Company where CompanyID NOT IN
(
Select C.CompanyID 
from Company C where C.CompanyID IN 
( 
  Select distinct CompanyID from Device
)
OR CompanyID IN
(
  Select distinct CustomerID from Device
)
OR CompanyID IN
(
  Select distinct CompanyID from AssignedCompanies
 )
 )
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

不,输出是正确的.

你有8441行Company-它们的CompanyID值只是那些6,你从你的第一个查询得到的一个(比方说A,B,C,D,E,F).

所有行都具有CompanyID来自这6个不同值的值.

因此,当您在上一个查询中选择时,您希望获得的值的值不是您在第一个查询中获得的那六个值中的任何一个 - 但是所有行都具有这六个值中的一个(A通过F)CompanyId!

所以你什么都没有回来 - 因为他们的所有CompanyId都存在于该子选择中,因此被排除在SELECT语句之外