gpt4 book ai didi

MySQL 选择多个表但返回 1 行

转载 作者:行者123 更新时间:2023-11-29 05:30:44 25 4
gpt4 key购买 nike

我有一个包含多个表的数据库,所有表都由一个 ID 绑定(bind)。这些表看起来像:

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)

希望这是有道理的。

提前致谢。

最佳答案

我认为您正在寻找 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 值。

关于MySQL 选择多个表但返回 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15097704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com