[英]Postgres: Convert single rows from multiple tables into multiple rows in a single table
我有分散在多個表和行中的數據,我想將這些數據聚合成更適合我的用例的格式。 問題歸結為這樣的事情......
如果我有兩個這樣的表:
product_id title_id description_id
1 123 234
2 345 456
3 567 678
product_id additional_info_id
1 789
1 890
2 901
我將如何構造一個查詢來返回這樣的數據?
product_id content_id content_type
1 123 title
1 234 description
1 789 additional_info
1 890 additional_info
2 345 title
2 456 description
2 901 additional_info
3 567 title
3 678 Description
我找到了這篇文章,我可以構建這樣的查詢
select
p.product_id,
p_content.*
from
product p,
lateral (values
(p.title_id, 'title'),
(p.description_id, 'description')
) p_content (content_id, content_type)
;
以我需要的格式從product
表中獲取數據,但我不知道如何合並additional_info
信息表中的數據。
您可以使用union all
:
select p.product_id, v.content_id, v.content_type
from product p cross join lateral
(values (p.title_id, 'title'),
(p.description_id, 'description')
) v(content_id, content_type)
union all
select product_id, additional_info_id, 'additional_info'
from additional_info ai;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.