select *
from emp
where empno not in (select distinct mgr
from emp)
以下写法结果正常
select *
from emp
where empno not in (select distinct mgr
from emp
where mgr is not null);

原因:null不能参与比较运算符,即与任何数据比较结果都为null,
- 如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)
- 如果null参与比较运算,则结果可视为false。(例如:>=,<=,<> 大于,小于,不等于)
- 如果null参与聚集运算,则聚集函数都置为null。除count(*)之外。
- 如果在not in子查询中有null值的时候,则不会返回数据。
in不存在上述问题
select *
from emp
where empno in (select distinct mgr
from emp);

博客介绍了MySQL中NULL值参与运算的规则。NULL不能参与比较运算符,与任何数据比较结果为NULL;参与算术运算,表达式值为NULL;参与比较运算,结果视为false;参与聚集运算,除count(*)外函数值为NULL;not in子查询中有NULL值时不返回数据,in无此问题。

被折叠的 条评论
为什么被折叠?



