簡體   English   中英

Postgres:將多個表中的單行轉換為單個表中的多行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM