2017-07-24 96 views
3

爲什麼此查詢在某些情況下會產生重複項?SQL完全外部加入W /合併

Table_1 
ID 
1 
2 
3 


Table_2 
ID 
1 
2 
4 

Table_3 
ID 
1 
3 
4 

查詢:

SELECT COALESCE(Table_1.ID, Table_2.ID, Table_3.ID) 
FROM Table_1 

FULL OUTER JOIN TABLE_2 
ON Table1.ID=Table_2.ID 

FULL OUT JOIN TABLE_3 
ON Table1.ID=Table3.ID; 

結果:

1 
2 
3 
4 
4 

查詢複製所有值,其中T1爲空和T2/T3共享相同的值。任何其他組合都會刪除重複項。

回答

2

這有點難以解釋。如果你表現出其他的ID,你會看到全系列會發生什麼:

"coalesce" "id1" "id2" "id3" 
    1   1  1  1 
    2   2  2  . 
    3   3  .  3 
    4   .  4  . 
    4   .  .  4 

你可以看到的結果here

所以,你得到一行,因爲t1 & t2當它們不匹配時,創建一行與t2.id = 4t1.id = null。然後,當t3.id = 4時,你會得到同樣的結果。比較是t1.id - 所以你會得到另一行。沒有比較t2.id

我懷疑你想要更多的邏輯是這樣的:

select coalesce(t1.id, t2.id, t3.id) 
from t1 full join 
    t2 
    using (id) full join 
    t3 
    using (id); 

Here是SQL小提琴。

+0

你鏈接的sqlfilddle很有幫助,謝謝。我嘗試了上面的邏輯,它也會產生重複的值。唯一的解決方案是按照@peterm的建議順序執行查詢嗎? – N00by

+0

@ N00by。 。 。我似乎已將錯誤的查詢複製到答案中。 –