代码之家  ›  专栏  ›  技术社区  ›  Daniel Sam

哪个SQL操作将给我两个元组的乘积?

  •  1
  • Daniel Sam  · 技术社区  · 15 年前

    刷新我的记忆。我不记得如何连接元组(a,b)和(c)来产生(a,b)*(c)。例如:

    n
    ---
    0
    1
    2
    

    site_id     value
    ----------- -------------
    1           a
    1           b
    2           c
    

    最后我想:

    site_id     value          n
    ----------- -------------- -- 
    1           a              0
    1           a              1
    1           a              2 
    1           b              0
    1           b              1
    1           b              2
    2           c              0
    2           c              1
    2           c              2
    

    我怎样才能做到这一点?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Mark Byers    15 年前

    这叫做 CROSS JOIN 也被称为笛卡尔积。

    SELECT *
    FROM Table1
    CROSS JOIN Table2
    

    也可以不使用join关键字,只使用逗号:

    SELECT * FROM Table1, Table2
    

    您可以使用以下完整的测试代码来验证它是否有效:

    CREATE TABLE Table1 (n int NOT NULL);
    INSERT INTO Table1 (n) VALUES
    (0),
    (1),
    (2);
    
    CREATE TABLE Table2 (site_id int NOT NULL, value nvarchar(100) NOT NULL);
    INSERT INTO Table2 (site_id, value) VALUES
    (1, 'a'),
    (1, 'b'),
    (2, 'c');
    
    SELECT Table2.site_id, Table2.value, Table1.n FROM Table1, Table2
    

    结果:

    site_id  value  n
          1      a  0
          1      a  1
          1      a  2
          1      b  0
          1      b  1
          1      b  2
          2      c  0
          2      c  1
          2      c  2
    
        2
  •  1
  •   SQLMenace    15 年前

    交叉连接

        3
  •  1
  •   Adriaan Stander    15 年前

    你可以试试

    Select *
    FROM table1, table2