bigquery中的条件连接

Bre*_*ner 3 sql join google-bigquery

我有两张桌子.

表1是整数的单个COLUMN.

表2有三个COLUMNS:start_integer,end_integer,data

简单的查询是将整数列与数据连接在一起

  integer >= start_integer AND integer <= end_integer
Run Code Online (Sandbox Code Playgroud)

在许多SQL实现中,这可以通过左条件JOIN ... ON BETWEEN来完成

SELECT tbl1.integer, tbl2.data FROM tbl1
LEFT JOIN tbl2 ON tbl1.integer BETWEEN tbl2.start_integer AND 
tbl2.end_integer;
Run Code Online (Sandbox Code Playgroud)

但似乎BigQuery只支持JOIN ON而只有一个=条件.

这可以通过交叉连接来完成,但BigQuery抱怨我的表太大了.CROSS JOIN EACH无效.

如何在BigQuery SQL的限制内完成此连接任务?

下面是我的BigQuery SQL:

SELECT tbl1.integer, tbl2.data
FROM bq:data.tbl1 
CROSS JOIN bq:data.tbl2
WHERE tbl1.integer BETWEEN tbl2.start_integer AND tbl2.end_integer;
Run Code Online (Sandbox Code Playgroud)

哪个返回错误:

错误:4.1 - 4.132:JOIN运算符的右侧表必须是一个小表.如果左侧表较小,则切换表;如果两个表都大于http://goo.gl/wXqgHs中描述的最大值,则使用JOIN EACH .

Fel*_*ffa 6

好消息(2016)!BigQuery现在支持不等式连接 - 确保取消选中"使用旧SQL选项".

示例查询:

SELECT * 
FROM (
  SELECT 1 x
) a JOIN (
  SELECT 2 y
) b
ON a.x<b.y
Run Code Online (Sandbox Code Playgroud)

使用旧版SQL:

Error: ON clause must be AND of = comparisons of one field name from each table, ...
Run Code Online (Sandbox Code Playgroud)

使用标准SQL:

1     2
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述