问题是:
选择具有id = 1
的用户是管理员的所有组以及同一用户所属的所有组,但不包括重复的组。您可以不属于组管理员。
架构:
users table
id, name
groups table
id, name, admin_id (user_id)
group_members table
group_id, member_id
SQL查询:
SELECT groups.name as group_name,
users.id as user_id,
users.name as user_name
FROM groups
INNER JOIN users ON groups.admin_id = users.id and users.id=1
LEFT JOIN group_members ON group_members.group_id = groups.id
LEFT JOIN users as users2 on group_members.member_id = users2.id and users2.id=1;
当前结果
http://sqlfiddle.com/#!17/a3158/26
更新1
已编辑以指示查询针对id=1的单个用户
最佳答案
选择具有id = 1
的用户是管理员的所有组以及同一用户所属的所有组,但不包括重复的组
两种解决方案:
SELECT g.id AS group_id, g.name AS group_name
FROM groups g
WHERE (g.admin_id = 1
OR EXISTS (
SELECT FROM group_members gm
WHERE gm.group_id = g.id
AND gm.member_id = 1));
或:
SELECT id AS group_id, name AS group_name
FROM groups
WHERE admin_id = 1
UNION
SELECT g.id, g.name
FROM group_members gm
JOIN groups g ON g.id = gm.group_id
WHERE gm.member_id = 1;
在你的基础上再接再厉。
关于sql - 如何在组/用户关系中联接表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51659508/