我想从 mytable1 中选择所有内容,并将其与 mytable2 中同样多的行组合起来。在我的例子中,mytable1 的行数始终少于 mytable2,并且我希望最终表是每个表中 50-50 条数据的混合。虽然我觉得下面的代码在逻辑上表达了我想要的内容,但它在语法上不起作用:
Syntax error: Expected "@" or integer literal or keyword CAST but got "(" at [3:1]
(SELECT * FROM `mytable1`)
UNION ALL (
SELECT * FROM `mytable2`
LIMIT (SELECT COUNT(*) FROM`mytable1`)
)
在bigquery中使用标准SQL
最佳答案
文档指出 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)
关于sql - BigQuery : Use COUNT as LIMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52733149/