gpt4 book ai didi

MySQL:将连接后的多个值组合到一个结果列中

转载 作者:IT老高 更新时间:2023-10-29 00:21:16 25 4
gpt4 key购买 nike

我有一个带有出版物表的数据库,每个出版物可以有多个作者,这些作者存储在不同的表中。我想查询数据库,在其中一列中提供出版物标题列表,在第二列中提供该出版物的联合作者。

SELECT p.`id`, p.`title`, a.`fullname` 
from `publications` p
LEFT JOIN `authors` a on a.`publication_id` = p.`id`;

这当然给了我多次作者的出版物标题。

id   title              fullname
-- ----- --------
1 Beneath the Skin Sean French
1 Beneath the Skin Nicci Gerrard
2 The Talisman Stephen King
2 The Talisman Peter Straub

按 id 分组给我每个标题一个作者:

SELECT p.`id`, p.`title`, a.`fullname` 
from `publications` p
LEFT JOIN `authors` a on a.`publication_id` = p.`id`
GROUP BY a.`id`;

id title fullname
-- ----- --------
1 Beneath the Skin Sean French
2 The Talisman Stephen King

我要找的结果是这样的:

id   title              fullname
-- ----- --------
1 Beneath the Skin Sean French, Nicci Gerrard
2 The Talisman Stephen King, Peter Straub

我认为应该在使用 GROUP_CONCAT 时找到答案,但我能得到的唯一结果是一个包含所有作者的结果行:

SELECT p.`id`, p.`title`, GROUP_CONCAT(a.`fullname`) from `publications` p 
LEFT JOIN `authors` a on a.`publication_id` = p.`id`
GROUP BY a.`id`;

id title fullname
-- ----- --------
1 Beneath the Skin Sean French, Nicci Gerrard, Stephen King, Peter Straub

在连接后使用 GROUP_CONCAT 会给我一个“每个派生表必须有自己的别名”错误。

SELECT p.`id`, p.`title`, a.`fullname` 
FROM `publications` p
LEFT JOIN (SELECT GROUP_CONCAT(a.`fullname`) FROM `authors` a) ON a.`publication_id` = p.`id`;

有什么线索吗?

最佳答案

您需要按 SELECT 中的所有非聚合列进行分组(并且明确地,不要按作者 ID 分组,因为作者是 GROUP_CONCAT 的一部分):

SELECT p.`id`, p.`title`, GROUP_CONCAT(a.`fullname` separator ', ')
from `publications` p
LEFT JOIN `authors` a on a.`publication_id` = p.`id`
GROUP BY p.`id`, p.`title`;

关于MySQL:将连接后的多个值组合到一个结果列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21553721/

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