哪个SQL操作会给我两个元组的产品?

时间:2010-01-27 19:29:06

标签: sql-server

刷新我的记忆。我不记得如何加入元组(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 个答案:

答案 0 :(得分:2)

这称为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

答案 1 :(得分:1)

做一个CROSS JOIN

答案 2 :(得分:1)

你可以尝试

Select *
FROM table1, table2