gpt4 book ai didi

mysql - SQL IN 不是NOT IN 的反义词吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:31 26 4
gpt4 key购买 nike

假设我有 3 个表来存储不同类型的用户

表1:所有用户,主键id

表2:admin用户,主键id,通过user_id连接到表1

表3:普通用户,主键id,通过user_id连接到表1

并且任何用户只能是一种类型的用户,也就是说表2和表3中的user_id不会冲突。

记录数:

表 1 : 100

表 2:30

表 3:70

SELECT * FROM `table_1`
WHERE `id` IN (
SELECT `user_id`
FROM `table_2`
)

这个返回 30 行是正确的。

但是,

SELECT * FROM `table_1`
WHERE `id` NOT IN (
SELECT `user_id`
FROM `table_2`
)

还我0。

我希望得到 70。

为什么会这样?

我的查询有没有错误?

谢谢

最佳答案

如果 table2 的 user_id 为空,则 NOT IN 永远不会为真,并且不会返回任何行。要么有子查询来避免那些空值:

SELECT * FROM `table_1`
WHERE `id` NOT IN (
SELECT `user_id`
FROM `table_2`
where `user_id` is not null
)

或者,使用NOT EXISTS:

SELECT * FROM `table_1`
WHERE NOT EXISTS (
SELECT *
FROM `table_2`
where table2.`user_id` = table1.`user_id`
)

关于mysql - SQL IN 不是NOT IN 的反义词吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46072568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com