Los*_*ear 1 sql t-sql sql-server sql-server-2008
我有两个完全不相关的表,我需要把它们放在一起 - 每个表一列.当我尝试笛卡尔联合时,我最终得到了所有组合:
SELECT Field1, Field2 FROM Table1, Table2
Run Code Online (Sandbox Code Playgroud)
结果:
Table1.Field1 Table2.Field2
---------------------------
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
Run Code Online (Sandbox Code Playgroud)
我需要它并排返回:
Table1.Field1 Table2.Field2
---------------------------
1 1
2 2
3 3
Run Code Online (Sandbox Code Playgroud)
这可能吗?提前致谢
编辑
Table1.Table1IDs
----------------
1
2
3
4
5
Table2.Table2IDs
----------------
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
期望的输出(进入临时表/选择语句)
Table1.Table1IDs Table2.Table2IDs
------------------------------------
1 6
2 7
3 8
4 9
5 10
Run Code Online (Sandbox Code Playgroud)
这样我就可以将插入到实际的表中,我需要进行插入:
INSERT INTO dbo.MTMObjects
SELECT Table1IDs, Table2IDs
FROM [temp table or solution]
Run Code Online (Sandbox Code Playgroud)
ANSWER Bluefeet给了我一个想法,使用临时表和一个我可以用来加入的标识列.他的'更安全'是因为你并不依赖SQL的幽默来对两个记录集进行相同的排序,但这可能有助于下一个人:
DECLARE @tmp_Table1 TABLE(ID int IDENTITY(1,1) NOT NULL, TableID1 int NOT NULL)
DECLARE @tmp_Table2 TABLE(ID int IDENTITY(1,1) NOT NULL, TableID2 int NOT NULL)
INSERT INTO @tmp_Table1
OUTPUT INSERTED.Field1
SELECT * FROM Table1
INSERT INTO @tmp_Table2
OUTPUT INSERTED.Field2
SELECT * FROM Table2
OUTPUT
SELECT tmp1.Field1, tmp2.Field2
FROM @tmp_Table1 tmp1 INNER JOIN @tmp_Table2 tmp2 ON tmp2.ID = tmp1.ID
Run Code Online (Sandbox Code Playgroud)
干杯!
你可以尝试使用这样的东西row_number().这将强制基于以下两个表之间的关系row_number:
select t1.col1, t2.col2
from
(
select col1, row_number() over(order by col1) rn
from table1
) t1
inner join
(
select col2, row_number() over(order by col2) rn
from table2
) t2
on t1.rn = t2.rn
Run Code Online (Sandbox Code Playgroud)