我有一个数据库,其中多个表都由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)
希望这是有道理的。
提前致谢。
答案 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
如果你想在结果周围使用括号,请使用另一个CONCAT:
CONCAT('(',GROUP_CONCAT(CONCAT(B.Exam_Result,',',B.Date_Taken)),')')
修改强>
我已经更新了使用LEFT JOIN而不是INNER JOIN处理来自TableB的NULL值的答案。