2011-05-12 38 views
2

首先,如果标题稍微偏离,则不好意思。我会用一个例子来解释我的情况。LEFT 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 

iee如果某个用户ID的某个条目与特定组ID相关联,则该用户在该组中,因此该列中将放置一个1。我使用这个来打印出一个管理页面的复选框列表。

我的问题很简单:这怎么能在MySQL中完成?显然是一种加入,但他们混淆了我的地狱。谢谢你的帮助。

詹姆斯

回答

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 
+0

非常感谢!这工作完美。 – Bojangles 2011-05-12 20:35:14

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创建它。

我希望我清楚:)

与乔提出LEFT JOIN答案也是完全正确的,但我认为这种方式更可扩展的,如果你要添加更多的条件。

+0

非常感谢。现在,我只是抓取数据而不执行任何操作。我首先尝试了这个查询,它工作但没有从'Groups'表中返回_all_行。对不起,不够清楚。 @ Joe的回答对我很好。 +1虽然:-) – Bojangles 2011-05-12 20:35:05

相关问题