从右表返回一行包含许多记录

时间:2012-08-23 20:41:45

标签: sql postgresql

我有两张桌子。一个是产品列表,一个是其众多属性的列表。 (这已经从我原来的模型中简化了。;))

prods有两列:idname 表格taxons有三列:idnameprod_id

Prods有四条记录:

id | name
= = = = = =
 1 | boat
 2 | tree
 3 | lamp
 4 | soda

Taxons有十五条记录:

 id |   name    | prod_id
= = = = = = = = = = = = = =
 1  | bright    | 3
 2  | breezy    | 1
 3  | green     | 2
 4  | wet       | 1
 5  | sturdy    | 2
 6  | shady     | 2
 7  | antique   | 3
 8  | deciduous | 2
 9  | buoyant   | 1
 10 | fizzy     | 4
 11 | calming   | 2
 12 | carefree  | 1
 13 | big       | 1
 14 | sweet     | 4
 15 | brass     | 3

我想要的是使用taxonsprodsprods.id加入taxons.prod_id的查询,但只返回4行,如下所示:

(所需)结果:

1 | boat | breezy | wet     | buoyant | carefree  | big
2 | tree | green  | sturdy  | shady   | deciduous | calming
3 | lamp | bright | antique | brass
4 | soda | fizzy  | sweet

我不知道该去哪里,我尝试了各种工会和联合组合,但没有发现任何有用的东西。我们正在使用postgres。有任何想法吗?

2 个答案:

答案 0 :(得分:3)

要获取一列中的所有值,您可以使用array_agg()

select p.id, array_agg(t.name) list
from prods p
inner join taxons t
   on p.id = t.prod_id
group by p.id

请参阅SQL Fiddle with Demo

答案 1 :(得分:2)

应该能够适应本文中的GROUP_CONCAT等价物:

Postgresql GROUP_CONCAT equivalent?