hgnb1 发表于 2023-6-29 09:35

【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)就会导致查询结果为空。

这种情况有没有其他关键字可以解决,求解答

业务需求是,一张表中有预置数据,选中一条数据确认后会插入到另一张表中,同时选中后的数据要不再显示

辛弃吉 发表于 2023-6-29 11:00

。。。。。。。。。。。这不是很简单的需求吗。。。。。
SELECT * FROM TableA LEFT JOIN TableB ON A.ID=B.FK01 WHERE B.FK01 IS NULL

gun008 发表于 2023-6-29 11:02

用 not exists 试试
SELECT * FROM TableA A WHERE NOT exists(SELECT 1 FROM TableB where FK01=A.id )

sky_walk 发表于 2023-6-29 11:14

SELECT * FROM TableA WHERE TableA.ID NOT IN(NULL) 语法不对
改成这样试试:SELECT * FROM TableA WHERE TableA.ID NOT IS NULL

chaifengbox 发表于 2023-6-29 11:28

难道不应该是?
SELECT * FROM TableA WHERE TableA.ID IS NOT NULL

goldli 发表于 2023-6-29 11:55

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 。

zhuxiangyu1024 发表于 2023-6-29 12:51

你的需求应该加flag字段,哪有这么弄的。

hgnb1 发表于 2023-6-29 13:25

本帖最后由 hgnb1 于 2023-6-29 13:36 编辑

goldli 发表于 2023-6-29 11:55
抛弃in/not in 改用 exists/not exists 。
{:1_893:}

hgnb1 发表于 2023-6-29 13:27

chaifengbox 发表于 2023-6-29 11:28
难道不应该是?
SELECT * FROM TableA WHERE TableA.ID IS NOT NULL

你没有理解我的需求,我的需求是TableA表中有预置数据,选中一条后往TableB中插入。同时将选中的数据排除不再显示

hgnb1 发表于 2023-6-29 13:28

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
查看完整版本: 【SQL】IN()与NOT IN()遇到的坑该如何解决