SQLFiddle:http://sqlfiddle.com/#!9/9d5b2的MySQL 5.6:多重左連接通向正確填寫列
我有MYSQL 5.6下下表:
users
id | name
---------
1 | John
groups
id | name
---------
1 | admin
constaints
id | name
------------
1 | cons1
2 | cons2
user_to_group
userid | groupid
----------------
1 | 1
constraint_to_group
constrainid | groupid
----------------------
1 | 1
constraint_to_user
constrainid | userid
----------------------
2 | 1
的理念是:
- 我有有限制的組。
- 用戶可以成員或0..n的組
- 約束也可直接關聯到用戶
我試圖建立一個返回查詢,對於特定用戶,
- 其全部組 個
- 的約束這些組
- 的約束直接關聯到他
我做了以下內容:
SELECT `users`.*,
`constraints`.id as cons_id,
`constraints`.name as cons_name,
`groups`.id as group_id,
`groups`.name as group_name
FROM `users`
LEFT JOIN `user_to_group`
ON `user_to_group`.userid=`users`.id
LEFT JOIN `groups`
ON `groups`.id=`user_to_group`.groupid
LEFT JOIN `constraint_to_group`
ON `constraint_to_group`.groupid=`user_to_group`.groupid
LEFT JOIN `constraint_to_user`
ON `constraint_to_user`.userid=`users`.id
LEFT JOIN `constraints`
ON (`constraints`.id=`constraint_to_group`.constraintid OR `constraints`.id=`constraint_to_user`.constraintid)
WHERE `users`.id=1
這讓我:
|id| name |cons_id|cons_name|group_id|group_name
------------------------------------------------
|1 | john |1 |cons1 |1 |admin
|1 | john |2 |cons2 |1 |admin
我的問題:
cons2並非來自組管理,它直接與用戶相關的,所以我想GROUP_ID和組名設置爲NULL(或其他東西),所以我可以知道約束是來自一個組還是直接與用戶相關聯
謝謝! :) – IggY