我有两个表 table1 和 table2 。其内容如下
mysql> select id from table1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.00 sec)
mysql> select id from table2;
+------+
| id |
+------+
| 301 |
| 2 |
| NULL |
+------+
3 rows in set (0.00 sec)
当我在mysql控制台中点击下面的查询时,它总是返回空集
select id
from table1
where id
not in (select id from table2);
空集(0.00秒)
如果子查询中存在空值,是否存在 和不在中会出现故障....?
我已使用以下查询
解决了这个问题select id
from table1
where id
not in (select id from table2 where id is not null);
+------+
| id |
+------+
| 1 |
| 3 |
| 4 |
+------+
设置3行(0.00秒)
只想知道
提前致谢:)
编辑:This question尝试清除空气但不够
答案 0 :(得分:4)
这就是not in
的工作原理。我建议您改为使用not exists
:
select id
from table1 t1
where not exists (select 1 from table2 t2 where t1.id = t2.id);
为什么not in
以这种方式工作?这是因为not in
的语义。请记住,SQL中的NULL
(通常)表示未知值。因此,如果你有一个"(1,2)"你可以说" 3"不在列表中。如果你有"(1,2,未知)"你不能这么说。相反,结果为NULL
,将其视为false。
NOT EXISTS
不会这样,所以我觉得使用起来更方便。