MySQL选择多个表但返回1行

时间:2013-02-26 19:34:03

标签: mysql

我有一个数据库,其中多个表都由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)

希望这是有道理的。

提前致谢。

1 个答案:

答案 0 :(得分: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值的答案。