SQL IN与NOT IN不相反吗?

Bri*_*adi 2 mysql sql database

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

表1:所有用户,主键id

表2:管理员用户,主键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`
)
Run Code Online (Sandbox Code Playgroud)

这个给我30行,这是正确的.

然而,

SELECT * FROM `table_1`
WHERE `id` NOT IN (
    SELECT `user_id` 
        FROM `table_2`
)
Run Code Online (Sandbox Code Playgroud)

给我回报0.

我希望能得到70分.

为什么会这样?

我的查询中有错误吗?

谢谢

jar*_*rlh 5

如果table2的user_id为null,NOT IN则永远不会为true,并且不会返回任何行.要么具有子查询以避免这些空值:

SELECT * FROM `table_1`
WHERE `id` NOT IN (
    SELECT `user_id` 
        FROM `table_2`
    where `user_id` is not null
)
Run Code Online (Sandbox Code Playgroud)

或者,使用NOT EXISTS:

SELECT * FROM `table_1`
WHERE NOT EXISTS (
    SELECT * 
    FROM `table_2`
    where table2.`user_id` = table1.`user_id`
)
Run Code Online (Sandbox Code Playgroud)