我想加入3个表(如下所示),但我无法弄清楚如何做到这一点:
表1
vendor_id
---------
1
2
3
4
表2
cuisine_type | vendor_id
------------------------
a |1
b |1
c |1
表3
cuisine_type|cuisine
--------------------
a |pizza
b |rice
c |steak
我想加入3个表格并获得:
vendor_id|cuisine_type|cuisine
------------------------------
1 |a, b, c |pizza, steak, rice
2.......
我希望这是有道理的。我对postgreSQL很新,所以也许我错过了一些非常简单/明显的东西。
答案 0 :(得分:2)
这是一个简单的连接和基于vendor_id的聚合:
select v.vendor_id,
string_agg(ct.cuisine_type, ', ') as cuisine_type,
string_agg(c.cuisine, ', ') as cuisine
from table_1 as v
join table_2 as ct on v.vendor_id = ct.vendor_id
join table_3 as c on ct.cuisine_type = c.cuisine_type
group by v.vendor_id;
答案 1 :(得分:1)
你的表结构看起来有点奇怪。例如,为什么每种菜肴都只有一种美食?通常情况下,我希望供应商与菜肴相关联,然后每种菜肴都有一种类型。
但是,这不是此问题。根据您提供的数据,您可以使用string_agg()
:
select v.vendor_id, string_agg(cuisine_type, ', ') as cuisine_types,
string_agg(cuisine, ', ') as cuisines
from table1 v left join
table2 v2c
on v.vendor_id = v2c.vendor_id left join
table3 c
on c.cuisine_type = v2c.cuisine_type
group by v.vendor_id;