从两个现有表中创建一个具有每种组合可能性的新表

时间:2012-10-24 19:53:09

标签: sql sql-server sql-server-2012

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

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

4 个答案:

答案 0 :(得分:8)

交叉连接将获得所有组合

SELECT a.Col
, b.Col
FROM TableA a
CROSS JOIN TableB b

答案 1 :(得分:4)

认为你可以做到

SELECT * INTO #c FROM #a,#b

答案 2 :(得分: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

答案 3 :(得分: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)

是的,当您想要笛卡尔积时,请使用cross join

相关问题