我有三個表,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