2011-03-23 3 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 

btw - 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; 
관련 문제