Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择多个表,但返回一行_Mysql - Fatal编程技术网

MySQL选择多个表,但返回一行

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

我有一个数据库,其中有多个表,所有表都由一个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_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显示空值?它实际上将所有数据合并到一行中:从我的头顶看,这是不可能的。向我们解释你想归档什么,这样我们就可以向你推荐更好的方式。