表结构如下
表Table_A:
id | name |
---|---|
1 | 张三 |
2 | 赵四 |
3 | 王五 |
4 | 徐六 |
表Table_B:
id | name |
---|---|
1 | null |
2 | 赵四 |
3 | 王五 |
sql:
SELECT * FROM Table_A a WHERE a.name NOT IN (SELECT b.name FROM Table_B b)
查询的结果集为空
原因:
如果在not in子查询中有null值的时候,则不会返回数据。
如果not in子查询中有null可以用如下sql
SELECT a.* FROM Table_A a WHERE a.name NOT IN (SELECT b.name FROM Table_B b WHERE b.name IS NOT NULL)
有not in 还要注意以下三点:
1.如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)
2.如果null参与比较运算,则结果可视为false。(例如:>=,<=,<> 大于,小于,不等于)
3.如果null参与聚集运算,则聚集函数都置为null。除count(*)之外。