gpt4 book ai didi

MySQL 将连接表留给自己

转载 作者:行者123 更新时间:2023-11-29 20:19:26 25 4
gpt4 key购买 nike

我一直在为此发疯,但我已经尽我所能了。

我有一个包含用户及其组列表的表(这是用户表和组表之间的中间表)。

我需要能够选择属于一个组但不属于另一个组的用户。

我知道我不应该在“on”期间使用 !=,因为它会永远挂起,但我不知道要使用哪种连接。

例如,我想选择“mod_group”中但不在“admin_group”中的所有用户。

我已经简化了这个例子,但是是的,我知道他们可能看起来是另一种方法来做到这一点。不幸的是,在其他地方重写可能不是一个选择,所以我希望通过这种方式找到解决方案。

编辑:添加表格以使其更清晰

这是中间表

| data_user | data_group |
+-----------+------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 1 |
| 3 | 2 |
| 4 | 2 |
| 5 | 1 |

如果我正在查找属于组 2 但不属于组 1 的用户,则预期结果将返回用户 2 和 4

它需要是动态的,所以我可以做相反的事情(查找属于 group1 但不在 group2 中的用户,这将返回 user5)

最佳答案

我假设您的表结构类似于以下内容:

中间表格

user_id | group_id

组表

id | name

用户表

id | username

您可以对 middle_table 中的用户使用条件聚合来识别位于 mod_group 中但不在 admin_group 中的用户:

SELECT t3.username
FROM middle_table t1
INNER JOIN group_table t2
ON t1.group_id = t2.id
INNER JOIN user_table t3
ON t1.user_id = t3.id
GROUP BY t1.user_id
HAVING COUNT(CASE WHEN t2.name = 'mod_group' THEN 1 ELSE 0 END) >= 1 AND
COUNT(CASE WHEN t2.name = 'admin_group' THEN 1 ELSE 0 END) = 0

关于MySQL 将连接表留给自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39567688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com