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