2012-09-21 45 views
1

我有2個表格根本不相關,我需要把它們放在一起 - 每個表格一列。當我嘗試笛卡爾加盟,我結束了與每一個組合:SQL Server 2008 - 需要幫助合併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 

所需的輸出(到一個臨時表/ select語句)

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 

乾杯!

回答

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 

+0

我最終使用了這種變化 - 我會張貼在上面,所以下一個傢伙將有2個解決方案:) – Losbear

+0

@Losbear你總是可以發佈你的版本作爲答案,然後接受它作爲解決方案。 – Taryn

0

如果我理解......你唯一需要的是增加在where子句

SELECT Field1, Field2 FROM Table1, Table2 WHERE Table1.Field1=Table2.Field2 
+0

這兩個表完全不相關 - 它們每個都有一個帶有ID的單列。 – Losbear

0

你或許應該改變你的最終解決方案中使用外連接,而不是內部聯接,以防表別t具有完全相同的行數。