Sql 为什么负号和不在运算符给出不同的结果
我有两张表tabA和TabB,其中包含一些ID 我在做什么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
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
)