ОК, я довольно плохо разбираюсь в 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.)