4

我有两个临时表 #a 和 #b 都填充了整数值。假设它们都包含 10 行,值为 1-10。

我想创建第三个临时表#c,其中包含 a 和 b 的所有可能组合。所以它总共有 100 行,有 (1,1), (1,2) ... (10, 10)。我将如何在 SQL 中执行此操作。我正在使用的实现是 SQL Server 2012。

4

4 回答 4

8

交叉加入将获得所有组合

SELECT a.Col
, b.Col
FROM TableA a
CROSS JOIN TableB b
于 2012-10-24T19:56:41.027 回答
4

你可以做

SELECT * INTO #c FROM #a,#b
于 2012-10-24T19:55:12.913 回答
1
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
于 2012-10-24T19:56:09.707 回答
1

这里肯定还有其他正确答案,但我会将它们中最好的元素添加在一起以完全回答这个问题:

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)

所以是的,当您想要笛卡尔积时,请使用交叉连接

于 2012-10-24T20:14:19.753 回答