首先,对不起,如果标题有点偏。我将用一个例子解释我的情况。
我有一个Groups
表,如下所示:
id name 1 admin 2 developer 3 reviewer 4 beta tester 5 contributor
然后我有一个Permissions
表,如下所示:
id user_id group_id 1 60 1 2 60 2 3 60 3
我想要做的是使用JOIN查询最终得到如下结果:
(perm.) name part of group admin 1 developer 1 reviewer 1 beta tester 0 contributor 0
即。如果某个用户ID的条目链接到某个组ID,则该用户位于该组中,因此会在该列中放入1
。我正在使用它来打印管理页面的复选框列表。
我的问题很简单:如何在MySQL中完成?显然是某种加入,但他们混淆了我的地狱。谢谢你的帮助。
詹姆斯
答案 0 :(得分:3)
SELECT g.Name,
CASE WHEN p.group_id IS NOT NULL THEN 1 ELSE 0 END AS part_of_group
FROM Groups g
LEFT JOIN Permissions p
ON g.id = p.group_id
AND p.user_id = 60
ORDER BY part_of_group DESC, g.Name
答案 1 :(得分:3)
SELECT
Groups.name,
Permissions.id is not null
FROM Permissions
RIGHT JOIN Groups ON Permissions.group_id = Groups.id
WHERE Permissions.user_id = 60
RIGHT JOIN
表示右表的每一行都有一行(即Groups
)。如果左表中的相应行(即Permissions
)不存在,则会使用null
创建值。
我希望我很清楚:)
Joe提出的LEFT JOIN
的答案也是完全正确的,但我认为如果你必须添加更多条件,这种方式更具可扩展性。