LEFT JOIN与一个表中的组列表,以及另一个表中的标志

时间:2011-05-12 20:07:10

标签: mysql join

首先,对不起,如果标题有点偏。我将用一个例子解释我的情况。

我有一个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中完成?显然是某种加入,但他们混淆了我的地狱。谢谢你的帮助。

詹姆斯

2 个答案:

答案 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的答案也是完全正确的,但我认为如果你必须添加更多条件,这种方式更具可扩展性。