SQL: объединение трех таблиц на двух наборах (иерархических) идентификаторов - PullRequest
0 голосов
/ 21 сентября 2018

ОК, я довольно плохо разбираюсь в SQL.Вот моя проблема установки.

У меня есть три таблицы, которые меня волнуют.Таблица A имеет одно поле: идентификаторы.Это небольшое количество идентификаторов, которые меня волнуют.В таблице B есть несколько полей: идентификаторы (это может повторяться) и, скажем, 9 других полей.

Я хочу агрегировать по соответствующим идентификаторам в таблице B и иметь остальные 9 полей в структуре ARRAY_AGG.Соответствующий означает, что он ограничен теми, которые находятся внутри таблицы 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);

Мой вопрос возникает следующим образом: обратите внимание, что одно из полей также является идентификатором.Я хочу объединить этот sub_id с другой таблицей, которая выглядит следующим образом:

Таблица C: sub_id, field0

Итак, что я хочу получить в итоге для моей финальной таблицы, примерно так:

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 имеется около 250K идентификаторов и порядка миллиардов элементов в таблицах B и C.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...