mysql - SQL按一组获取用户,排除其他用户

标签 mysql sql

我正在尝试编写一个查询来检索属于 A 组的所有用户,但排除属于 BC 组的用户> & 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 组中的任何人,但如果他们在 BCD 组中,则如何排除他们?

最佳答案

使用聚合:

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 的额外列,您可以加入它(或使用 inexists)。

关于mysql - SQL按一组获取用户,排除其他用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55355478/

相关文章:

asp.net - XML 片段中不允许使用 DTD - xml 转为 sql

php - 在 PostgreSQL 中使用单引号动态插入文本

sql - postgres 本地模式限定符

php - 在登录系统 PHP 中实现用户帐户

Mysql:优化针对大表的查询

php - 从列中获取值,但返回 null?

MySQL - 帮助编写搜索查询语法

php - 获取引导模式值并设置为文本字段

需要 MySQL 通配符解决方法

mysql - 如何在额外列中显示值的计数