我有几个表,主表有一个名为“id”的属性,而thing表有一个名为“id_main”的属性。主要项目可能有多个东西。一件事可能只有一个主要。我如何使用main的每个东西获得一个数组?我的查询有效,但返回的东西数量很多,它包含主要属性的副本,每个属性都有不同的关系。这是我的问题:
SELECT
m.id
, x.color
, t.volume
, t.age
FROM main m
LEFT JOIN extra x
ON x.id = m.id
LEFT JOIN thing t
ON t.id = m.id
WHERE m.id = 1234;
它正在回归:
{id: 1234, color: 'red', volume: '8', age: '10'}
{id: 1234, color: 'red', volume: '3', age: '25'}
{id: 1234, color: 'red', volume: '19', age: '152'}
我想得到:
{id: 1234, color: 'red', things:[{volume:'8', age:'10'}, {volume:'3', age:'25'}, {volume:'19', age:'152'}]}
或者尽可能接近。有一个简单的方法吗?
答案 0 :(得分:0)
如果您可以灵活地将'音量'和'年龄'拆分为2个数组,那么您的选择可能如下所示:
SELECT
m.id
, x.color
, array_agg(t.volume) as t_volume
, array_agg(t.age) as t_age
FROM main m
LEFT JOIN extra x
ON x.id = m.id
LEFT JOIN thing t
ON t.id = m.id
WHERE m.id = 1234
GROUP BY m.id, x.color;