SQL:在两组(分层)ID上连接三个表

时间:2018-09-20 21:35:51

标签: sql postgresql

好的,我对SQL很不好。这是我的问题设置。

我有三个表在乎。 表A具有一个字段:ID。这是我关心的少数ID。 表B有几个字段:ID(可以重复)和其他9个字段。

我想汇总表B中的相关ID,并在ARRAY_AGG结构中包含其他9个字段。相关意味着它仅限于表A中的表。请注意,表B很大,因此必须进行汇总才能编写大小合理的结果表。

这可以很容易地通过以下方式完成:

SELECT 
  a.id, 
  ARRAY_AGG(STRUCT( 
    b.sub_id,
    b.field1, 
    b.field2,
    b.field3)
   ) AS b_fields
FROM table_a AS a
JOIN table_b AS b
USING(id);

我的问题如下:请注意,字段之一也是ID。我想在该sub_id上加入另一个表,如下所示:

表C:sub_id,字段0

所以,我最终要进入决赛桌的事情是这样的:

a.id, 
ARRAY_AGG(STRUCT( 
  b.sub_id,
  b.field1, 
  b.field2,
  b.field3,
  c.field0) as sub_level_info

问题是我不知道如何执行此操作(正如我在SQL中提到的那样)。我不想预先加入表B和表C,因为它很大而且很慢。但是我不知道是否可以将表C的内容添加到表A和表B的联接的输出中。

有人知道如何以最快的方式做到这一点吗?

(供参考,假设表A中有大约25万个id,并且表B和C中有数十亿个元素。)

0 个答案:

没有答案