2012-08-23 96 views
2

我有两个表格。一个是产品的列表,一个是他们许多属性的列表。 (这已经从我原来的模型简化了;))从右表返回一行并记录多条记录

prods有两列:idname
taxons有三列:id,nameprod_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

我想是使用prods.idtaxons.prod_id是加入taxonsprods查询,但只返回4行,所以像这样:

(所需)R esult:

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

应该能够在这篇文章中GROUP_CONCAT当量适应:

Postgresql GROUP_CONCAT equivalent?

+0

谢谢,这工作。 :)我以为我搜索过高和低!结束了这样的事情:SELECT p.name,array_agg(t.name)作为prod_taxons FROM prods作为p LEFT JOIN taxons as t ON p.id = t.prod_id GROUP BY p.name; – melissanoelle

+0

很高兴工作! – mwigdahl

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