我有2个完全不相关的表,我需要将它们放在一起 - 每个表一列。当我尝试笛卡尔联合时,我最终得到了所有组合:
SELECT Field1, Field2 FROM Table1, Table2
结果:
Table1.Field1 Table2.Field2
---------------------------
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
我需要它并排返回:
Table1.Field1 Table2.Field2
---------------------------
1 1
2 2
3 3
这可能吗?提前致谢
修改 的
Table1.Table1IDs
----------------
1
2
3
4
5
Table2.Table2IDs
----------------
6
7
8
9
10
所需的输出(进入临时表/选择语句)
Table1.Table1IDs Table2.Table2IDs
------------------------------------
1 6
2 7
3 8
4 9
5 10
然后,我可以将插入到实际的表中,我需要进行插入:
INSERT INTO dbo.MTMObjects
SELECT Table1IDs, Table2IDs
FROM [temp table or solution]
的 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
干杯!
答案 0 :(得分:5)
你可以使用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
答案 1 :(得分:0)
如果我理解......你唯一需要的是在where子句
中添加一个过滤器SELECT Field1, Field2 FROM Table1, Table2 WHERE Table1.Field1=Table2.Field2
答案 2 :(得分:0)
如果表格的行数不完全相同,您应该更改最终解决方案以使用外部联接而不是内部联接。