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分.
为什么会这样?
我的查询中有错误吗?
谢谢
如果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)