首先,我甚至不確定LEFT JOIN
是否是做我想做的最好的方法,因此會盡力解釋。如果沒有匹配,則使用默認值執行LEFT JOIN
我有2個表 - 一個包含網站列表,另一個包含角色列表。用戶可能只有一個角色,但他們可能具有與站點一樣多的角色。
表 '網站'
site_id | site_name | site_domain
---------------------------------------
1 | Site A | sitea.com
2 | Site B | siteb.com
表 '角色'
site_id | user_id | role_id
---------------------------------
1 | 1 | 1
1 | 2 | 1
2 | 2 | 2
正如我上面的例子中,用戶1有一個站點只有一個角色,但用戶2在兩個不同的網站上有兩個角色。
我想要做的事情,它可能只是一個星期天的夜晚不會直接思考的事情,是要列出網站列表以及每個用戶的角色 - 如果該網站沒有角色對於用戶,則返回NULL(或0)。
應該如何產生的輸出的兩個例子:
用戶1
site_id | site_name | site_domain | role_id
----------------------------------------------
1 | Site A | sitea.com | 1
2 | Site B | siteb.com | NULL
用戶2
site_id | site_name | site_domain | role_id
----------------------------------------------
1 | Site A | sitea.com | 1
2 | Site B | siteb.com | 2
查詢我的時刻低於然而, ,第二個網站沒有出現,因爲用戶沒有定義角色(即像上面那樣,但是對於我們呃1第二個網站B將不會列出)。我知道,我只是失去了一些東西,但不能認爲它今晚:O(
SELECT site_id, site_name, site_domain, role_id
FROM `sites`
LEFT JOIN `roles`
ON sites.site_id=roles.site_id
WHERE roles.user_id='1'
你能舉一個你想要的結果的例子嗎? – 2013-03-03 20:10:57
這些例子顯示了它應該如何出現,使之更清晰一些:o) – MrJ 2013-03-03 20:12:41