2011-05-12 37 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

相關問題