Я задал похожий вопрос здесь , который, по моему мнению, достаточно абстрагировал мою проблему, но, к сожалению, этого не произошло.
У меня есть таблица вложенных массивов, первый столбец - int.Я могу объединить два массива без дублирования (как ответили в моем предыдущем вопросе), но я не уверен, как это сделать с более чем двумя.
Вот таблица (в StandardSQL):
WITH
a AS (
SELECT
1 AS col1,
ARRAY[1, 2 ] AS col2,
ARRAY[1, 2, 3] AS col3,
ARRAY[1, 2, 3, 4] AS col4
UNION ALL
SELECT
2 AS col1,
ARRAY[1, 2, 2] AS col2,
ARRAY[1, 2, 3] AS col3,
ARRAY[1, 2, 3, 4] AS col4
UNION ALL
SELECT
3 AS col1,
ARRAY[2, 2 ] AS col2,
ARRAY[1, 2, 3] AS col3,
ARRAY[1, 2, 3, 4] AS col4
)
SELECT
*
FROM
a
Производит:
+-------++--------++--------++---------+
| col1 | col2 | col3 | col4 |
+-------++--------++--------++---------+
| 1 | 1 | 1 | 1 |
| | 2 | 2 | 2 |
| | | 3 | 3 |
| | | | 4 |
| 2 | 1 | 1 | 1 |
| | 2 | 2 | 2 |
| | | 3 | 3 |
| | | | 4 |
| 3 | 1 | 1 | 1 |
| | 2 | 2 | 2 |
| | | 3 | 3 |
| | | | 4 |
+-------++--------++--------++---------+
Но то, что я ищу, это:
+-------++--------++--------++---------+
| col1 | col2 | col3 | col4 |
+-------++--------++--------++---------+
| 1 | 1 | 1 | 1 |
| null | 2 | 2 | 2 |
| null | null | 3 | 3 |
| null | null | null | 4 |
| 2 | 1 | 1 | 1 |
| null | 2 | 2 | 2 |
| null | null | 3 | 3 |
| null | null | null | 4 |
| 3 | 1 | 1 | 1 |
| null | 2 | 2 | 2 |
| null | null | 3 | 3 |
| null | null | null | 4 |
+-------++--------++--------++---------+
Вот как я отменяю множество столбцов:
SELECT
col1,
_col2,
_col3
FROM
a left join
unnest(col2) as _col2
left join unnest(col3) as _col3
Производство этой таблицы:
+-------++--------++--------+
| col1 | col2 | col3 |
+-------++--------++--------+
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 1 | 1 | 3 |
| 1 | 2 | 1 |
| 1 | 2 | 2 |
| 1 | 2 | 3 |
| 2 | 1 | 1 |
| 2 | 1 | 2 |
| 2 | 1 | 3 |
| 2 | 2 | 1 |
| 2 | 2 | 2 |
| 2 | 2 | 3 |
...
...
...
+-------++--------++--------++