2013-02-26 2 views
1

ID가 연결된 여러 개의 테이블이있는 데이터베이스가 있습니다.MySQL 여러 테이블 선택하지만 1 행 반환

TableA: 
    user_id 
    user_firstname 
    user_lastname 

TableB: 
    user_id 
    exam_result 
    date_taken 

표 A는 오직 하나의 행 (독특한 USER_ID)를 포함하지만 표 B가 USER_ID 당 여러 행을 포함 할 수 있습니다 : 표는 같을 것이다. 이런 식으로 뭔가 : 나는이 두 테이블에서 데이터를 얻을 수 있지만, 오직 고유 한 ID 당 1 개 행을 리턴 할 수있는 방법

TableA: 
    user_id = 1 
    user_firstname = blah 
    user_lastname = blah 

    user_id = 2 
    user_firstname = blah 
    user_lastname = blah 

TableB: 
    user_id = 1 
    exam_result = F 
    date_taken = somedate 

    user_id = 1 
    exam_result = E 
    date_taken = somedate 

    user_id = 1 
    exam_result = U 
    date_taken = somedate 

    user_id = 2 
    exam_result = A 
    date_taken = somedate 

    user_id = 2 
    exam_result = A 
    date_taken = somedate 

내 문제는 내가 그 중첩 된 선택이라고 생각 ...입니다. 나는 결과가 같은 것을 표시하기 위해 얻을 수있는 경우

는 :

user_id1, user_first_name1, user_lastname1, (F, somedate, E, somedate, U, somedate) 
user_id2, user_first_name2, user_lastname2, (A, somedate, A, somedate) 

를 잘하면 의미가 있습니다.

미리 감사드립니다.

+0

내 머리 꼭대기에서 이것은 불가능합니다. 우리가 당신에게 더 나은 방법을 제안 할 수 있도록 무엇을 성취하려고하는지 설명하십시오. – rcdmk

답변

3

나는 당신이 GROUP_CONCAT 찾고있는 생각 :

CONCAT('(',GROUP_CONCAT(CONCAT(B.Exam_Result,',',B.Date_Taken)),')') 

편집 :

당신이 결과 괄호를 원하는 경우

SELECT A.User_Id, A.user_firstname, A.user_lastname, 
    GROUP_CONCAT(CONCAT(B.Exam_Result,',',B.Date_Taken)) 
FROM TableA A 
    LEFT JOIN TableB B ON A.User_Id = B.User_Id 
GROUP BY A.User_Id 

SQL Fiddle Demo

가 다른 CONCAT를 사용

TableB의 NULL 값을 처리하기 위해 INNER JOIN 대신 LEFT JOIN을 사용하는 답이 업데이트되었습니다.

+0

그는 각 행에 대해 2 열의 데이터를 목록에 넣기를 원합니다. – rcdmk

+1

@rcdmk :이 대답은 그 결과를 제공해야합니다. –

+0

@sgeddes 그 덕분에 ... 좋아 보인다. 나는 그것으로 놀고 나의 실제 데이터로 어떤 일이 일어나는지 보게 될 것이다. – jaminben

관련 문제