我有两个临时表 #a 和 #b 都填充了整数值。假设它们都包含 10 行,值为 1-10。
我想创建第三个临时表#c,其中包含 a 和 b 的所有可能组合。所以它总共有 100 行,有 (1,1), (1,2) ... (10, 10)。我将如何在 SQL 中执行此操作。我正在使用的实现是 SQL Server 2012。
我有两个临时表 #a 和 #b 都填充了整数值。假设它们都包含 10 行,值为 1-10。
我想创建第三个临时表#c,其中包含 a 和 b 的所有可能组合。所以它总共有 100 行,有 (1,1), (1,2) ... (10, 10)。我将如何在 SQL 中执行此操作。我正在使用的实现是 SQL Server 2012。
交叉加入将获得所有组合
SELECT a.Col
, b.Col
FROM TableA a
CROSS JOIN TableB b
我想你可以做
SELECT * INTO #c FROM #a,#b
BEGIN
DECLARE @a TABLE(x INT)
DECLARE @b TABLE(x INT)
INSERT INTO @a VALUES (1), (2)
INSERT INTO @b VALUES (1), (2)
select * from @a,@b
END
这里肯定还有其他正确答案,但我会将它们中最好的元素添加在一起以完全回答这个问题:
select a.Col as ColA -- Give the columns a name for the destination
, b.Col as ColB
into #c -- Generates destination temp table #c
from #a as a
cross join #b as b -- Cross join is the preferred syntax
order by a.Col, b.Col -- Optional but often helpful (aesthetic, identities, indexing, etc)
所以是的,当您想要笛卡尔积时,请使用交叉连接。