Ich habe drei Tabellen, T1, T2 und T3. Tabellenstruktur und Werte:CROSS JOIN mehr als zwei Tabellen
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
So mit normalen SQL I T1 und T2 auf t1_k1 = t2_k1 und T2 und T3 auf t2_k2 = t3_k2 verbinden kann, das heißt:
SELECT t1_val, t2_val, t3_val
FROM t1, t2, t3
WHERE t1_k1 = t2_k1 AND t2_k2 = t3_k2
Um
t1foo | t2foo | t3foo
t1bar | t2bar | t3bar
t1baz | t2baz | t3baz
Jetzt versuche ich das gleiche Ergebnis mit bigQuery SQL zu bekommen. Von meinem Verständnis, CROSS mit JOIN sollte wie das Komma in regelmäßigen SQL arbeiten, also dachte ich folgend funktionieren würde:
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
Aber ich erhalte eine Fehlermeldung, dass „Feld‚t3_k2‘nicht auf beiden Seiten der gefundenen BEITRETEN". Hinzufügen von Klammern wie folgt aus:
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
eine gibt (offen ziemlich kryptisch) Syntaxfehler ‚Fand‚‘in Zeile 0, Spalte 0‘ Mit nur zwei Tabellen funktioniert CROSS JOIN, aber dann unterscheidet es sich nicht von einem normalen JOIN. Ich habe keine Beispiele gefunden, die CROSS JOIN an mehr als zwei Tabellen verwenden. Ist es möglich? Mache ich etwas falsch?
Ihr zweites Beispiel funktioniert nicht. Ich habe es bearbeitet, um "SELECT t1_val, t2_val, t3_val FROM ..." zu lesen, und ich bekomme: "Field 't3_val' nicht auf beiden Seiten des JOIN gefunden". – persson
funktioniert zuerst für Sie? –
Es funktioniert, aber es funktioniert auch mit regulären JOIN. Also, was ist der Sinn von CROSS JOINs? – persson