我正在尝试编写一个查询来检索属于 A
组的所有用户,但排除属于 B
、C
组的用户> & D
.
用户在 users
表中由 user_id
唯一标识,但在 groups
表中可以有多个条目。
我有以下查询但它不起作用:
SELECT user_id
FROM users
LEFT JOIN groups USING (user_id)
WHERE groups.name = 'A'
AND groups.name NOT IN ('B', 'C', 'D')
这只是从 A
组中选择所有用户。
如何包含 A
组中的任何人,但如果他们在 B
、C
和 D
组中,则如何排除他们?
最佳答案
使用聚合:
SELECT user_id
FROM groups
GROUP BY user_id
HAVING SUM(g.name = 'A') > 0 AND
SUM(g.name IN ('B', 'C', 'D')) = 0;
注意:您不需要加入用户
。您的查询仅选择 groups
表中的用户 ID。当然,如果您需要来自 users
的额外列,您可以加入它(或使用 in
或 exists
)。
关于mysql - SQL按一组获取用户,排除其他用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55355478/