1.准备测试数据
CREATE TABLE tmp_1
(val integer);CREATE TABLE tmp_2
(val integer, val2 integer);INSERT INTO tmp_1 (val) VALUES (1);
INSERT INTO tmp_1 (val) VALUES (2);
INSERT INTO tmp_2 (val) VALUES (1);
INSERT INTO tmp_2 (val, val2) VALUES (NULL,0);
2.测试
假设我们需要从tmp_1
找出val
值不存在于tmp_2
表的记录。
当tmp_2
中val
字段存在空值时,就会出现判断失效情况:
2.1 判断失效的情况
SELECT val FROM tmp_1
WHERE val NOT IN (SELECT val FROM tmp_2);
查询结果
已在 Oracle、MySQL验证,均存在相同情况
2.1 调整后
此处对子查询进行修改
SELECT val FROM tmp_1
WHERE val NOT IN (SELECT val FROM tmp_2 where val is not null);
查询结果