You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL多对多关系查询:如何将多行结果合并为格式化字符串?

在PostgreSQL中将多作者查询结果合并为字符串

首先要指出,你之前的查询语句存在错误:author表中并没有book_id字段,无法直接通过a.book_id = 23筛选,必须通过中间关联表book_author来关联book和author表。

PostgreSQL完全支持将多行结果合并为单个格式化字符串的需求,核心是使用**string_agg**聚合函数,它可以将指定字段的多行值按照指定分隔符拼接成一个字符串。

基础实现:查询指定书籍的作者列表

以下是正确的查询语句,用于将book_id=23的所有作者名合并为逗号分隔的字符串:

SELECT string_agg(a.author_name, ', ') AS authors
FROM author a
JOIN book_author ba ON a.author_id = ba.author_id
WHERE ba.book_id = 23;

进阶:同时显示书名和作者列表

如果需要同时展示书籍名称和对应的作者列表,可以关联book表并按书名分组:

SELECT b.book_name, string_agg(a.author_name, ', ') AS authors
FROM book b
JOIN book_author ba ON b.book_id = ba.book_id
JOIN author a ON ba.author_id = a.author_id
WHERE b.book_id = 23
GROUP BY b.book_name;

可选:对作者名排序后拼接

如果希望作者名按字母顺序排列后再拼接,可以在string_agg中添加ORDER BY子句:

SELECT string_agg(a.author_name, ', ' ORDER BY a.author_name) AS authors
FROM author a
JOIN book_author ba ON a.author_id = ba.author_id
WHERE ba.book_id = 23;

内容的提问来源于stack exchange,提问作者Bud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:25:21