2013-02-26 75 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多行。事情是這樣的:

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 

我的問題是如何才能將數據從兩個表,但每唯一的ID永遠只返回1行...我認爲它稱爲嵌套查詢。

如果我能得到的結果顯示是這樣的:

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 2013-02-26 19:46:38

回答

3

我認爲你正在尋找GROUP_CONCAT

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:

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

編輯:

我已經更新了使用LEFT JOIN而不是INNER JOIN處理來自TableB的NULL值的答案。

+0

他希望每行的2列數據都在列表中。 – rcdmk 2013-02-26 19:45:34

+1

@rcdmk:這個答案應該給出結果。 – 2013-02-26 19:46:53

+0

@sgeddes謝謝你......它看起來不錯。我會玩它,看看我的真實數據會發生什麼。 – jaminben 2013-02-26 19:48:51