我的用户和组表设置如下。
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)
有没有办法选择不在给定组中的所有用户?我尝试加入users和users_groups表并添加一个group_id != 1条件,但是当用户位于另一个组中时,我最终得到了用户,例如用户 [1, 3, 3, 4, 5]。
因此,当我说我想要不属于给定组的用户时,group_id != 1在这种情况下,示例结果应该是用户 [3, 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)
| 归档时间: |
|
| 查看次数: |
4295 次 |
| 最近记录: |