MySQL选择多个表,但返回一行
我有一个数据库,其中有多个表,所有表都由一个ID绑定。这些表看起来像:MySQL选择多个表,但返回一行,mysql,Mysql,我有一个数据库,其中有多个表,所有表都由一个ID绑定。这些表看起来像: TableA: user_id user_firstname user_lastname TableB: user_id exam_result date_taken user_id1, user_first_name1, user_lastname1, (F, somedate, E, somedate, U, somedate) user_id2, user_first
TableA:
user_id
user_firstname
user_lastname
TableB:
user_id
exam_result
date_taken
user_id1, user_first_name1, user_lastname1, (F, somedate, E, somedate, U, somedate)
user_id2, user_first_name2, user_lastname2, (A, somedate, A, somedate)
表A将只包含一行(唯一用户ID),但表B可以包含每个用户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行。。。我想这叫做嵌套选择
如果我能得到显示如下内容的结果:
TableA:
user_id
user_firstname
user_lastname
TableB:
user_id
exam_result
date_taken
user_id1, user_first_name1, user_lastname1, (F, somedate, E, somedate, U, somedate)
user_id2, user_first_name2, user_lastname2, (A, somedate, A, somedate)
希望这是有道理的
提前谢谢。我想您正在寻找
团体会议
:
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)),')')
编辑:
我已经更新了答案,使用左连接而不是内部连接来处理表B中的空值。他希望列表中每行有两列的数据。@rcdmk:这个答案应该给出这个结果。@sgedes感谢。。。看起来不错。我将使用它,看看我的真实数据会发生什么。@sgedes,它可以工作,但只适用于在两个表中都有ID的数据。。。我的一些数据在表A中有一个ID,但在表B中没有该ID的行。无论如何,它可以为这些ID显示空值?它实际上将所有数据合并到一行中:从我的头顶看,这是不可能的。向我们解释你想归档什么,这样我们就可以向你推荐更好的方式。