Sql 为什么负号和不在运算符给出不同的结果

Sql 为什么负号和不在运算符给出不同的结果,sql,Sql,我有两张表tabA和TabB,其中包含一些ID 我在做什么 Select DISTINCT ID from tabA minus select DISTINCT ID from TabB--- I am some ID's which do not exist in TabB. 但当我这么做的时候 Select DISTINCT Id from tabA where ID NOT IN (Select DISTINCT ID from TabB) ---------- I do not g

我有两张表tabA和TabB,其中包含一些ID

我在做什么

Select  DISTINCT ID from tabA minus select DISTINCT ID from TabB--- I am some ID's which do not exist in TabB.
但当我这么做的时候

 Select DISTINCT Id from tabA where ID NOT IN (Select DISTINCT ID from TabB) ---------- I do not get any result             

NOT in获取您正在检查的另一个表中不可用的记录。这是直截了当且易于理解的

减号检查您正在使用的表,它会忽略匹配和不匹配的值,并提供结果。使用下面的链接了解有关减号的更多信息


不在将获取您正在检查的其他表中不可用的记录。这是直截了当且易于理解的

减号检查您正在使用的表,它会忽略匹配和不匹配的值,并提供结果。使用下面的链接了解有关减号的更多信息


不要在子查询中使用
not IN
!如果任何返回值都是
NULL
,那么它就没有做正确的事情。好吧,它做的是“正确的”事情——它非常不直观:如果任何值为
NULL
notin
会过滤掉所有行

因此,您发现
减号
以一种方式处理
NULL
s,而
不以另一种方式处理

因此,我强烈建议您使用
notexists


注意:
SELECT DISTINCT
s与
减号是冗余的。该操作符已经删除了重复项(很像
UNION
)。

不要将
not IN
与子查询一起使用!如果任何返回值都是
NULL
,那么它就没有做正确的事情。好吧,它做的是“正确的”事情——它非常不直观:如果任何值为
NULL
notin
会过滤掉所有行

因此,您发现
减号
以一种方式处理
NULL
s,而
不以另一种方式处理

因此,我强烈建议您使用
notexists

注意:
SELECT DISTINCT
s与
减号是冗余的。该操作符已经删除了重复项(很像
UNION