【问题标题】:Postgres: Convert single rows from multiple tables into multiple rows in a single tablePostgres:将多个表中的单行转换为单个表中的多行
【发布时间】:2020-01-25 19:16:54
【问题描述】:

我有分散在多个表和行中的数据,我希望将这些数据聚合成更适合我的用例的格式。问题归结为这样的事情......

如果我有两个这样的表:

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

我找到了this 的帖子,我可以构建这样的查询

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 表中的数据。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    你可以使用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;
    

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2011-04-16
      • 2020-05-10
      • 1970-01-01
      相关资源
      最近更新 更多