CROSS JOIN:只有两张桌子?

时间:2016-05-30 13:51:37

标签: google-bigquery

似乎没有关于bigQuery SQL中的CROSS JOIN是否可以在两个表上使用的文档。

如果有可能,我希望看到正确的语法。如果不可能,那么知道什么是CROSS JOIN会很有用,因为有两个表可以使用常规JOIN。

另请参阅此问题:CROSS JOIN more than two tables

3 个答案:

答案 0 :(得分:1)

3个表之间的交叉连接似乎对我有用。见下面的例子。

我在一些特殊情况下使用交叉连接,我故意想要复制行。或者当您想知道2个表之间的所有可能组合时,可能是因为另一个连接会在您不想要的时候消除行。

SELECT
  *
FROM (
  SELECT
    *
  FROM (
    SELECT
      'a' ),
    (
    SELECT
      'b' ),
    (
    SELECT
      'c' ) ) AS X1
CROSS JOIN (
  SELECT
    *
  FROM (
    SELECT
      '1' ),
    (
    SELECT
      '2' ),
    (
    SELECT
      '3' ) ) AS X2
CROSS JOIN (
  SELECT
    *
  FROM (
    SELECT
      'x' ),
    (
    SELECT
      'y' ),
    (
    SELECT
      'z' ) ) AS X3

答案 1 :(得分:0)

可能值得阅读各种类型的SQL连接:https://en.m.wikipedia.org/wiki/Join_(SQL)。它们都有不同的用途。

也就是说,与所有其他类型的连接一样,您可以成对地指定它们,但它们可以在单个from子句中链接在一起:

SELECT *
FROM a CROSS JOIN b CROSS JOIN c;

答案 2 :(得分:0)

因此,对于任何可能阅读此内容的人的好处:问题是bigQuery SQL或多或少地强制使用表(和字段)别名,因此例如三个表上的工作CROSS JOIN可能是:

SELECT tt1.t1_val, tt2.t2_val, tt3.t3_val FROM
test.t1 AS tt1 CROSS JOIN test.t2 as tt2 CROSS JOIN test.t3 AS tt3
WHERE tt1.t1_k1 = tt2.t2_k1 AND tt2.t2_k2 = tt3.t3_k2