gpt4 book ai didi

mysql - GROUP_CONCAT() 之类的函数返回不匹配的字段?

转载 作者:行者123 更新时间:2023-11-29 02:45:01 25 4
gpt4 key购买 nike

我的数据库中有三个表,为了便于讨论,假设它们是:

USERS   
-----
user_id
user_name

ROLES
-----
role_id
role

USER_ROLES
----------
user_role_id
user_id
role_id

我可以轻松地使用 GROUP_CONCAT() 返回用户拥有拥有的逗号分隔角色列表,如下所示:

SELECT u.user_id, u.user_name, GROUP_CONCAT(role) AS roles_held
FROM users u,
roles r,
user_roles ur
WHERE u.user_id = ur.user_id
AND r.role_id = ur.role_id
GROUP BY u.user_id, u.user_name;

我还想返回用户没有的角色列表。

我最初的想法是使用子查询然后将其连接起来,但我似乎无法让它发挥作用。有人可以指出我正确的方向吗?

谢谢!

编辑:为了澄清,所需的输出将是一个返回 user_id、user_name、用户拥有的角色的串联字符串和用户不具有的角色的串联字符串的查询有。例如:

USER_ID    USER_NAME    ROLES_HELD      ROLES_LACKED
1 Bob User,Writer Editor,Admin
2 Doug User Writer,Editor,Admin

最佳答案

我同意在这里使用CROSS JOIN,但它不需要那么复杂:

SELECT
u.user_id,
u.user_name,
GROUP_CONCAT(case when ur.user_id is not null then r.role end) AS roles_held,
GROUP_CONCAT(case when ur.user_id is null then r.role end) as roles_lacked
FROM
users u
CROSS JOIN roles r
LEFT JOIN user_roles ur ON
u.user_id = ur.user_id
AND r.role_id = ur.role_id
GROUP BY
u.user_id, u.user_name

关于mysql - GROUP_CONCAT() 之类的函数返回不匹配的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43993482/

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