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)),')')

编辑:

我已经更新了使用 LEFT JOIN 而不是 INNER JOIN 来处理 TableB 中的 NULL 值的答案。

于 2013-02-26T19:38:02.217 回答