postgresql V 9.3
最好用一个例子解释:
所以我有两张桌子:
书籍表:
book_id name
1 Aragorn
2 Harry Potter
3 The Great Gatsby
4 Book name, with a comma
用户ID到图书ID表:
user_id book_id
31 1
31 2
32 3
34 1
34 4
我想向每位用户展示他/她的书籍,如下所示:
user_id book_names
31 Aragorn,Harry Potter
32 The Great Gatsby
34 Aragorn,Book name, with a comma
基本上每个用户都会将他/她的图书用逗号分隔
如何以高效的方式实现这一目标?
答案 0 :(得分:1)
如果您使用的是Postgres版本8.4或更高版本,则可以使用\b
。一种选择是通过array_agg()
汇总用户帐簿表,然后使用user_id
为每个用户生成CSV列表。
array_agg()
在Postgres 9.0及更高版本中,您可以使用以下内容将书名聚合为CSV列表:
SELECT t1.user_id,
array_to_string(array_agg(t2.name), ',') AS book_names
FROM user_books t1
INNER JOIN books t2
ON t1.book_id = t2.book_id
GROUP BY t1.user_id