1

我有 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]

回答 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

干杯!

4

3 回答 3

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

请参阅带有演示的 SQL Fiddle

于 2012-09-21T20:43:16.633 回答
0

如果我理解...您唯一需要的是在 where 子句中添加一个过滤器

SELECT Field1, Field2 FROM Table1, Table2 WHERE Table1.Field1=Table2.Field2
于 2012-09-21T20:13:29.173 回答
0

您可能应该将最终解决方案更改为使用外连接而不是内连接,以防表的行数不完全相同。

于 2012-09-21T21:14:23.293 回答