我有两个临时表#a和#b都填充了整数值。假设它们都包含10行,值为1-10。
我想创建第三个临时表#c,其中包含a和b的所有可能组合。所以它总共有100行(1,1),(1,2)......(10,10)。我将如何在SQL中执行此操作。我正在使用的实现是SQL Server 2012。
答案 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。