BigQuery: используйте COUNT как LIMIT - PullRequest
0 голосов
/ 10 октября 2018

Я хочу выбрать все из mytable1 и объединить это с таким же количеством строк из mytable2.В моем случае в mytable1 всегда меньше строк, чем в mytable2, и я хочу, чтобы в итоговой таблице было 50-50 данных из каждой таблицы.Хотя я чувствую, что следующий код логически выражает то, что я хочу, он не работает с точки зрения синтаксиса:

Синтаксическая ошибка: ожидается "@" или целочисленный литерал или ключевое слово CAST, но получено "(" в [3: 1]

(SELECT * FROM `mytable1`)
UNION ALL (
    SELECT * FROM `mytable2`
    LIMIT (SELECT COUNT(*) FROM`mytable1`)
)

Использование стандартного SQL в больших запросах

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

В документе указано, что предложение LIMIT принимает только литеральные значения или значения параметров.Я думаю, что вы можете ROW_NUMBER() строки из второй таблицы и ограничения на основе этого:

SELECT col1, col2, col3
FROM mytable1

UNION ALL

SELECT col1, col2, col3 
FROM (
    SELECT col1, col2, col3, ROW_NUMBER() OVER () AS rn
    FROM mytable2
) AS x
WHERE x.rn <= (SELECT COUNT(*) FROM mytable1)
0 голосов
/ 10 октября 2018
  • Каждый оператор SELECT в UNION должен иметь одинаковое количество столбцов
  • Столбцы также должны иметь одинаковые типы данных
  • Столбцы в каждом операторе SELECT также должны быть одинаковымиorder

Так как ваш mytable1 всегда меньше столбца, чем mytable2, поэтому вы должны поставить одинаковое количество столбцов при выборе

select col1,col2,col3,'' as col4 from mytable1 --in case less column you can use alias 
union all
select col1,col2,col3,col4 from mytable2 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...