如何创建虚拟列并在连接后填充数组?
How to create a dummy column and populate with an array after joins?
我有3张桌子
Table 1 landing_modules
- l_id
- l_name
- l_module
- l_variant
- l_version
Table 2 类别
- c_id
- c_name
Table 3 类别_landing_modules
- l_id
- c_id
l_id
和 c_id
分别是从 table_3
到 table_1
和 table_2
的外键。现在需要的输出是
landing_modules
中的所有行,即
SELECT * FROM landing_modules;
但另外我想在结果集中有一列作为 category_ids
,它应该包含来自 table_3 - category_landing_modules
的相应 c_ids(category_ids)
。
结果集看起来像
- l_id
- l_name
- l_module
- l_variant
- l_version
- c_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
我有3张桌子
Table 1 landing_modules
- l_id
- l_name
- l_module
- l_variant
- l_version
Table 2 类别
- c_id
- c_name
Table 3 类别_landing_modules
- l_id
- c_id
l_id
和 c_id
分别是从 table_3
到 table_1
和 table_2
的外键。现在需要的输出是
landing_modules
中的所有行,即
SELECT * FROM landing_modules;
但另外我想在结果集中有一列作为 category_ids
,它应该包含来自 table_3 - category_landing_modules
的相应 c_ids(category_ids)
。
结果集看起来像
- l_id
- l_name
- l_module
- l_variant
- l_version
- c_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