我想从mytable1中选择所有内容,并将其与mytable2中的尽可能多的行合并。在我的情况下,mytable1的行总是比mytable2少,我希望最终表是每个表中数据的50-50混合。虽然我觉得以下代码在逻辑上表达了我想要的东西,但在语法上却行不通:
语法错误:预期为“ @”或整数文字或关键字CAST,但得到了 “(” at [3:1]
(SELECT * FROM `mytable1`)
UNION ALL (
SELECT * FROM `mytable2`
LIMIT (SELECT COUNT(*) FROM`mytable1`)
)
在bigquery中使用标准SQL
答案 0 :(得分:2)
文档指出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)
答案 1 :(得分:0)
由于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