Я пытаюсь сгладить массивы в разных столбцах разной длины без дублирования результатов.
Например (используя стандартный SQL):
WITH
x AS (
SELECT
ARRAY[1,
2,
3] AS a,
ARRAY[1,
2] AS b)
SELECT
a,
b
FROM
x,
x.a,
x.b
Производит:
+-----++-----+
| a | b |
+-----++-----+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
| 3 | 2 |
+-----++-----+
Это должно выглядеть так:
+-----++-----+
| a | b |
+-----++-----+
| 1 | 1 |
| 2 | 2 |
| 3 | null |
+-----++-----+
Похоже, вам не хватает группы, чтобы получить желаемые результаты
@TamirKlein - Не могли бы вы привести пример?
Также я советую удалить тег sql
, так как google-bigquery
отклоняется от некоторого базового синтаксиса SQL ANSI/ISO, который является тегом sql на этом веб-сайте. Поскольку синтаксис соединения запятых ANSI/ISO FROM x, x.a, x.b
— это UNION ALL
в google-bigquery
вместо CROSS JOIN
, который, как я полагаю, был в устаревшем режиме.
@RaymondNijland - перекрестное соединение дает тот же результат. Не могли бы вы привести пример, иллюстрирующий вашу точку зрения?
from_body: { from_item [, ...] | # Warning: Comma means UNION ALL here
это в поиске руководство "Грамматика запроса
@RaymondNijland - пример в вопросе. Вставьте SQL в BigQuery и нажмите «Выполнить», чтобы воспроизвести пример в вопросе.
FROM
означает UNION ALL
) и стандартном SQL (где запятая в FROM
означает CROSS JOIN
) в google bigquery, поскольку было неясно, в каком режиме вы используете запрос, поскольку вы использовали старый синтаксис соединения запятых ANSI/ISO. В идеале вам следует избегать использования любого способа и использовать синтаксис неявного соединения, такой как ответ @GordonLinoff, поскольку его запрос правильный и должен давать правильные результаты
Вы можете использовать JOIN
:
SELECT a, b
FROM x LEFT JOIN
UNNEST(x.a) a left join
unnest(x.b) b
ON a = b;
Это работает очень хорошо. Как бы вы добавили больше столбцов помимо «а» и «б»? Допустим, у вас есть еще 2 вложенных столбца. Как бы вы присоединились? Первоначально оператор «и» имел смысл («... a = b и b = c»), но он просто дублировал «a» и «b». Есть предположения?
@этаннглиш . . . Вы можете продолжать добавлять дополнительные unnest()
s. Если вы не можете заставить его работать, вы должны задать другой вопрос.
Я только что сделал: stackoverflow.com/questions/56586399/… :)
MySQL <> google-bigquery
..