2012-07-30 3 views
2

"preference"테이블의 모든 레코드가 의 p.data 결과가 반환되게 할 수 있습니까?다른 레코드의 문자열이있는 MySQL 조인 테이블

나는 단지 CONCAT을 생각할 수 있지만, 내 내부 조인은 오직 하나의 레코드만을 선택합니다.

예 쿼리

SELECT 
    u.userid, 
    p.data 

FROM user u 

INNER JOIN preference p ON (
    p.userid = u.userid 
) 

WHERE u.userid = 1 

원하는 출력

userid | data 
-------------- 
1  | 1,2,3,4,5 
2  | 1,2,3,4 
3  | 1,2,3 

답변

3

의 MySQL의 GROUP_CONCAT() 수행 정확히이 기능 :

SELECT 
    u.userid, 
    GROUP_CONCAT(p.data) AS data 
FROM 
    user u 
    INNER JOIN preference p ON u.userid = p.userid 
WHERE u.userid = 1 
GROUP BY u.userid 

당신 만 g 당신의 WHERE 절 때문에 한 행 뒤로. 모든 사용자의 행을 반환하려면 WHERE 절을 제거하십시오. preference 테이블에서 관련 행이없는 사용자를 반환하려면 LEFT JOIN으로 전환하십시오.

+0

저를 40 초 미만으로이기십시오! :( –

+0

완벽한, 감사합니다! – JREAM

2

내부 조인과 상관없이 하나의 필드 만 조인하십시오. 그룹을 추가해야합니다. 그룹을 추가해야합니다.

SELECT 
    u.userid, 
    GroupConcat(p.data) as Data 

FROM user u 

INNER JOIN preference p ON (
    p.userid = u.userid 
) 
--WHERE u.userid = 1 With this you not gonna get the desired output. 
group by u.userId 
+0

고마워, 그냥 GROUP_CONCAT해야합니다! – JREAM