2012-12-04 161 views
0

假設有兩個表A = {A,B}和B = {0,1,2},這可以結合奇怪SQL請求(加入)

tableA tableB 
a  0 
b  1 
a  2 
     3 

如何獲得以下結果 ExpectingResult:

tableA tableB 
a-------0 
b-------1 
null----2 
null----3 

OR

tableA tableB 
    a-------2 
    b-------3 
    null----0 
    null----1 

只要確保每個表中的元素只出現一次,我試過各種j的oin(內在的,完整的,交叉的),他們都不能實現。有人可以給我一個小費嗎?

非常感謝您

請檢查該鏈接出了問題本身:http://www.sqlfiddle.com/#!3/9fc21/2

+2

什麼DBMS您使用的? –

+0

SQL SERVER 2000 – user1874700

+0

根據什麼標準將'a'與'0'匹配而不是'1'? –

回答

0

一個蹩腳的請求。想到產生這樣一個輸出的想法幾乎可以忽略不計,儘管我並沒有完全排除一個理智的理由。

對於SQL Server 2000,您將需要通過臨時表以獲取壓縮的順序密鑰。

SELECT IDENTITY(int,1,1) ID, Value 
    INTO #tblA 
    FROM tableA 
ORDER BY Value; 

    SELECT IDENTITY(int,1,1) ID, Value 
    INTO #tblB 
    FROM tableB 
ORDER BY Value; 

    SELECT A.Value, B.Value 
    FROM #tblA A FULL OUTER JOIN #tblB B ON A.ID = B.ID 
ORDER BY Coalesce(A.ID, B.ID); 
+0

感謝您的快速回答,我非常感謝它。 – user1874700

+0

我想我的描述不是很清楚。連接條件不是唯一的,所以不能爲它們分配唯一的ID以加入它們。假設它們的連接條件是相同的值,你能區分結果嗎? – user1874700

+0

@ user1874700 - 添加'IDENTITY' *(ROWNUM)*的全部目的是讓每一行都是唯一的。你試過了嗎?你試過我設置的[小提琴](http://www.sqlfiddle.com/#!3/bbb34/2)嗎? –

0

使用SQL Server 2005,您可以使用ROW_NUMBER組合和FULL OUTER JOIN到兩個結果結合起來。

SQL Fiddle

不幸的是,SQL Server 2000沒有一個ROW_NUMBER功能,所以你是友善的使用臨時表與標識字段來模擬ROWNUMBER卡住。

這樣做的主旨將是

  • 從表A中選擇您所需要的數據爲#tempTableA,添加標識字段。
  • 重複的tableB的
  • 使用temptables到FULL OUTER JOIN結果
+0

謝謝Lieven,我只是改寫了這個問題,Sry爲了混淆 – user1874700

+0

嗨Lieven,你介意檢查一下這個鏈接並修改查詢請求.http: //www.sqlfiddle.com/#!3/13294/8 – user1874700