2011-03-23 76 views
0
User 
uid name 

Roles 
uid role_id 

Subscriptions 
uid subscriptions_id 

好吧,這似乎太容易了,但我們都沒有得到所希望的結果,應該是這樣的:加入在SQL三個表

user roles subscriptions 
1 2,3 1,4,5 
2 2,4 4,5,6 
.... 

相反,結果是這樣的:

user roles subscriptions 
1 2,3 5 
2 2,4 6 
.... 

的選擇命令如下:

SELECT User.name, 
     GROUP_CONCAT(Roles.role_id), 
     GROUP_CONCAT(Subscriptions.subscriptions_id) 
FROM User 
     LEFT JOIN Roles ON User.uid = Roles.uid 
     LEFT JOIN Subscriptions ON Users.uid = Subscriptions.uid 

順便說一句 - GROUP_CONCAT不是問題。如果我離開了這一點,我還是得到這樣的:

user roles subscriptions 
1 2  5 
1 3  5 
2 2  6 

,而不是

user roles subscriptions 
1 2  1 
1 3  4 
1 -  5 

回答

0

我嘗試這樣做:

SELECT User.uid, 
     GROUP_CONCAT(DISTINCT Roles.role_id), 
     GROUP_CONCAT(DISTINCT Subscriptions.subscriptions_id) 
FROM User 
     LEFT JOIN Roles ON User.uid = Roles.uid 
     LEFT JOIN Subscriptions ON User.uid = Subscriptions.uid 
GROUP BY User.uid 

,我得到這個:

user roles subscriptions 
1  2,3  1,5,4 
2  2,4  4,5,6 

是你的結果嗎?

0
select 
u.uid, u.name, r.roles_grp_concat, s.subs_grp_concat 
from 
users u 
left outer join 
(
    select uid, group_concat(role_id) as roles_grp_concat 
    from roles group by uid 
) r on r.uid = u.uid 
left outer join 
(
    select uid, group_concat(subscriptions_id) as subs_grp_concat 
    from subscriptions group by uid 
) s on s.uid = u.uid 
order by 
u.uid;