我有三个表,t1,t2和t3。表结构和值:CROSS JOIN超过两个表
t1_id | t1_k1 | t1_val
------+-------+--------
1 | k1foo | t1foo
2 | k1bar | t1bar
3 | k1baz | t1baz
t2_id | t2_k1 | t2_k2 | t2_val
------+-------+-------+--------
1 | k1foo | k2foo | t2foo
2 | k1bar | k2bar | t2bar
3 | k1baz | k2baz | t2baz
t3_id | t3_k2 | t3_val
------+-------+--------
1 | k2foo | t3foo
2 | k2bar | t3bar
3 | k2baz | t3baz
因此,与普通的SQL我可以加入t1和t2上t1_k1 = t2_k1和T2和T3上t2_k2 = t3_k2,那就是:
SELECT t1_val, t2_val, t3_val
FROM t1, t2, t3
WHERE t1_k1 = t2_k1 AND t2_k2 = t3_k2
要获得
t1foo | t2foo | t3foo
t1bar | t2bar | t3bar
t1baz | t2baz | t3baz
现在我试图用bigQuery SQL得到相同的结果。从我的理解,使用CROSS JOIN应该工作就像普通的SQL逗号,所以我想下面将工作:
SELECT t1_val, t2_val, t3_val
FROM test.t1 CROSS JOIN test.t2 CROSS JOIN test.t3
WHERE t1_k1 = t2_k1 AND t2_k2 = t3_k2
但我得到一个错误,“场‘t3_k2’上的任何一方未找到加入”。 添加括号这样的:
SELECT SELECT t1_val, t2_val, t3_val
FROM ((test.t1 CROSS JOIN test.t2) CROSS JOIN test.t3)
WHERE t1_k1 = t2_k1 AND t2_k2 = t3_k2
给出了一个(相当坦率隐蔽)的语法错误“遇到‘’在线0,列0”。 只有两个表CROSS JOIN可以工作,但与正常的JOIN没有区别。 我还没有发现在两个以上的表上使用CROSS JOIN的例子。可能吗?难道我做错了什么?
你的第二个例子不起作用。我编辑它来阅读“选择t1_val,t2_val,t3_val从...”,我得到:“字段't3_val'没有找到任何一方的JOIN”。 – persson
首先适合你吗? –
它可以工作,但它也可以与常规JOIN一起使用。那么,CROSS JOIN有什么意义? – persson