1

複数のテーブルがすべてIDで関連付けられたデータベースがあります。テーブルは次のようになります。

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)

うまくいけば、それは理にかなっています。

前もって感謝します。

4

1 に答える 1

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フィドルデモ

結果を括弧で囲む場合は、別のCONCATを使用します。

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

編集:

TableBからのNULL値を処理するために、INNERJOINの代わりにLEFTJOINを使用するように回答を更新しました。

于 2013-02-26T19:38:02.217 に答える