【SQL】IN()与NOT IN()遇到的坑该如何解决
本帖最后由 hgnb1 于 2023-6-29 09:52 编辑SQL:
SELECT * FROM TableA WHERE TableA.ID NOT IN(SELECT FK01 FROM TableB)
正常有关联的情况下,TableB 外键(FK01)值不为空的状况下,查询结果正常
但是在FK01查询结果为NULL时SELECT * FROM TableA WHERE TableA.ID NOT IN(NULL)就会导致查询结果为空。
这种情况有没有其他关键字可以解决,求解答
业务需求是,一张表中有预置数据,选中一条数据确认后会插入到另一张表中,同时选中后的数据要不再显示 。。。。。。。。。。。这不是很简单的需求吗。。。。。
SELECT * FROM TableA LEFT JOIN TableB ON A.ID=B.FK01 WHERE B.FK01 IS NULL 用 not exists 试试
SELECT * FROM TableA A WHERE NOT exists(SELECT 1 FROM TableB where FK01=A.id ) SELECT * FROM TableA WHERE TableA.ID NOT IN(NULL) 语法不对
改成这样试试:SELECT * FROM TableA WHERE TableA.ID NOT IS NULL 难道不应该是?
SELECT * FROM TableA WHERE TableA.ID IS NOT NULL gun008 发表于 2023-6-29 11:02
用 not exists 试试
SELECT * FROM TableA A WHERE NOT exists(SELECT 1 FROM Tabl ...
抛弃in/not in 改用 exists/not exists 。
你的需求应该加flag字段,哪有这么弄的。 本帖最后由 hgnb1 于 2023-6-29 13:36 编辑
goldli 发表于 2023-6-29 11:55
抛弃in/not in 改用 exists/not exists 。
{:1_893:} chaifengbox 发表于 2023-6-29 11:28
难道不应该是?
SELECT * FROM TableA WHERE TableA.ID IS NOT NULL
你没有理解我的需求,我的需求是TableA表中有预置数据,选中一条后往TableB中插入。同时将选中的数据排除不再显示 sky_walk 发表于 2023-6-29 11:14
SELECT * FROM TableA WHERE TableA.ID NOT IN(NULL) 语法不对
改成这样试试:SELECT * FROM TableA WHERE ...
你没有理解我的需求,我的需求是TableA表中有预置数据,选中一条后往TableB中插入。同时将选中的数据排除不再显示
我第二个语句是演示错误情况,如果子查询为空时,会导致出现NOT IN(NULL) 情况,但此时SQL不会报错,会导致查询结果为空
页:
[1]
2