如何创建虚拟列并在连接后填充数组?

How to create a dummy column and populate with an array after joins?

我有3张桌子

Table 1 landing_modules

Table 2 类别

Table 3 类别_landing_modules

l_idc_id 分别是从 table_3table_1table_2 的外键。现在需要的输出是

landing_modules 中的所有行,即

SELECT * FROM  landing_modules;

但另外我想在结果集中有一列作为 category_ids,它应该包含来自 table_3 - category_landing_modules 的相应 c_ids(category_ids)

结果集看起来像

您可以使用相关子查询。

SELECT lm.*,
       ARRAY(SELECT clm.c_id
                    FROM category_landing_modules clm
                    WHERE clm.l_id = lm.l_id) c_ids
       FROM landing_modules lm;

如果我没理解错的话,我想你想要array_agg:

select
  l.l_id, l.l_name, l.l_module, l.l_variant, l.l_version,
  array_agg (cl.c_id) as c_ids
from
  landing_modules l
  left join category_landing_modules cl on
    l.l_id = cl.l_id
group by
  l.l_id, l.l_name, l.l_module, l.l_variant, l.l_version