回答

收藏

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

技术问答 技术问答 192 人阅读 | 0 人回复 | 2023-09-14

我有一个用于发布的数据库,每个表可以有多个作者存储在不同的表中。我想查询数据库,以便在第一列中提供出版物标题列表,并在第二列中提供出版物。
) k- }* Q0 _5 T; M( HSELECT p.`id`,p.`title`,a.`fullname` from `publications` p LEFT JOIN `authors` a on a.`publication_id` = p.`id`;当然,这使我多次获得了许多作者的出版物标题。
8 n: ?3 H  f) p2 X) C' K& d( Iid   title              fullname--   -----              --------1    Beneath the Skin   Sean French1    Beneath the Skin   Nicci Gerrard2    The Talisman       Stephen King2    The Talisman       Peter Straub按ID分组后,每个标题都给了我一个作者:& w) |! \$ Y8 i7 g0 L" J% D5 ]% E
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 French2    The Talisman       Stephen King我正在寻找的结果是:
0 i2 C, C: M% {0 @+ J2 \3 ]+ bid   title              fullname--   -----              --------1    Beneath the Skin   Sean French,Nicci Gerrard2    The Talisman       Stephen King,Peter Straub我觉得应该用GROUP_CONCAT找到答案,但我唯一能得到的结果是所有作者的结果:
: W& X; m  X' B1 p: z! [6 z& P& u1 ]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给我一个每个派生表都必须有自己的别名的错误。6 ~7 C7 M5 x+ f( Z; P
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`;有什么线索吗?# N: {' R# h3 k7 X# i
                                                               
: L1 s6 d( h* e$ ?; D! j+ T    解决方案:                                                               
. z! I$ v" K+ R' [3 _! U4 C9 J                                                                您需要对SELECT中间的所有非聚合列都被分组(并且很明显,不是作者ID分组,因为author是GROUP_CONCAT部分):4 |* ?- Z% F& F6 ]3 V7 Z% H
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`;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则