我的数据库中有三个表,出于讨论的目的,我们说它们是:
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 ROLES_HELD ROLES_LACKED
1 Bob User,Writer Editor,Admin
2 Doug User Writer,Editor,Admin
我想做的还是返回用户没有的角色列表。
我最初的想法是使用子查询然后连接它,但我似乎无法让它工作。有人能指出我正确的方向吗?
谢谢!
编辑:为了澄清,所需的输出将是一个返回user_id,user_name,用户所拥有的角色的串联字符串以及用户不具有的角色的串联字符串的查询有。例如:
from collections import OrderedDict
c = OrderedDict()
n = 1
with open('file.txt', 'r') as f:
for line in f:
c.update({n:line})
#if you just want to print it, skip the dict part and just do:
print n,line
n += 1
答案 0 :(得分:1)
我同意在这里使用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
答案 1 :(得分:0)