table1的
col1 col2
a b
c d
和表2
mycol1 mycol2
e f
g h
i j
k l
我想這兩個表,其中有沒有共同的領域進入一個結合表看起來像:
表3
col1 col2 mycol1 mycol2
a b e f
c d g h
null null i j
null null k l
即,它就像是把兩個並排放在一起。
我被卡住了!請幫忙!
table1的
col1 col2
a b
c d
和表2
mycol1 mycol2
e f
g h
i j
k l
我想這兩個表,其中有沒有共同的領域進入一個結合表看起來像:
表3
col1 col2 mycol1 mycol2
a b e f
c d g h
null null i j
null null k l
即,它就像是把兩個並排放在一起。
我被卡住了!請幫忙!
獲取每個表中各行的行號,然後做用這些行號全聯接:
WITH CTE1 AS
(
SELECT ROW_NUMBER() OVER(ORDER BY col1) AS ROWNUM, * FROM Table1
),
CTE2 AS
(
SELECT ROW_NUMBER() OVER (ORDER BY mycol1) AS ROWNUM, * FROM Table2
)
SELECT col1, col2, mycol1, mycol2
FROM CTE1 FULL JOIN CTE2 ON CTE1.ROWNUM = CTE2.ROWNUM
這是假設的SQL Server> = 2005
這真是好,如果你把這個問題爲什麼需要解決的描述。我猜這只是練習sql語法?
無論如何,由於行沒有任何連接它們,我們必須創建一個連接。我選擇了它們的值的排序。此外,由於他們沒有任何連接,所以也會提出一個問題,即爲什麼你想先把它們放在一起。
下面是完整的解決方案:http://sqlfiddle.com/#!6/67e4c/1
的選擇代碼如下所示:
WITH rankedt1 AS
(
SELECT col1
,col2
,row_number() OVER (order by col1,col2) AS rn1
FROM table1
)
,rankedt2 AS
(
SELECT mycol1
,mycol2
,row_number() OVER (order by mycol1,mycol2) AS rn2
FROM table2
)
SELECT
col1,col2,mycol1,mycol2
FROM rankedt1
FULL OUTER JOIN rankedt2
ON rn1=rn2
選項1:單查詢
您有加入兩個表,如果你希望table1中的每一行只與table2中的一行相匹配,那麼你的就有來限制連接。我怎麼樣。計算每個表中的行數並加入該列。行號是數據庫特定的;這裏是一個mysql的解決方案:
SELECT
t1.col1, t1.col2, t2.mycol1, t2.mycol2
FROM
(SELECT col1, col2, @t1_row := t1_row + 1 AS rownum FROM table1, (SELECT @t1_row := 0) AS r1) AS t1
LEFT JOIN
(SELECT mycol1, mycol2, @t2_row := t2_row + 1 AS rownum FROM table2, (SELECT @t2_row := 0) AS r2) AS t2
ON t1.rownum = t2.rownum;
這假設table1比table2更長;如果table2較長,則使用RIGHT JOIN
或切換t1和t2子選擇的順序。另請注意,您可以使用子選擇中的ORDER BY
子句分別指定每個表的順序。
(見select increment counter in mysql)
選項2:後處理
考慮做兩個選擇,然後連接用你最喜歡的腳本語言的結果。這是一個更合理的方法。
其中RDBMS?你顯然不想跨加入,但你希望如何排列行。即爲什麼e,f與a,b一起? – Randy
通常,當問題是這樣的時候,你正在做一些實際上沒有意義的事情。你有什麼用於並排表?如果您只是在應用程序中顯示數據,那麼可能比您提出的建議好得多。 – catfood
sqlserver。嗨,e,f不需要跟a,b。表3中的列對彼此獨立。 – user4109