SQL查询获取不在组中的所有用户

Mar*_* S. 4 sql

我的用户和组表设置如下。

users
  id int

groups
  id int

users_groups
  user_id int
  group_id int
Run Code Online (Sandbox Code Playgroud)

示例数据:

+---------+----------+
| user_id | group_id |
+---------+----------+
| 1       | 1        |
| 1       | 2        |
| 2       | 1        |
| 3       | 2        |
| 3       | 3        |
| 4       | 1        |
| 4       | 2        |
| 5       | 2        |
+---------+----------+
Run Code Online (Sandbox Code Playgroud)

有没有办法选择不在给定组中的所有用户?我尝试加入usersusers_groups表并添加一个group_id != 1条件,但是当用户位于另一个组中时,我最终得到了用户,例如用户 [1, 3, 3, 4, 5]。

因此,当我说我想要不属于给定组的用户时,group_id != 1在这种情况下,示例结果应该是用户 [3, 5]。

Mar*_*ers 5

选择不在给定组中的用户 ID 的最简单方法是使用NOT IN

SELECT id
FROM users
WHERE id NOT IN (SELECT user_id FROM users_groups WHERE group_id = 1)
Run Code Online (Sandbox Code Playgroud)

其他常用的替代方案是NOT EXISTS

SELECT id
FROM users
WHERE NOT EXISTS (
    SELECT NULL
    FROM users_groups
    WHERE group_id = 1
    AND user_id = users.id
)
Run Code Online (Sandbox Code Playgroud)

LEFT JOIN / IS NULL

SELECT id
FROM users
LEFT JOIN users_groups
ON users.id = users_groups.user_id
AND users_groups.group_id = 1
WHERE users_groups.user_id IS NULL
Run Code Online (Sandbox Code Playgroud)