2017-06-05 83 views
0

我知道UNIONUNION ALL之間的主要區別是前者刪除重複的記錄,而後者保留所有的記錄。我的問題是如何在UNION刪除重複的記錄,如果有多列?例如,工會T1(A, B, C)T2(A, B, C)MySQL的'UNION'如何刪除具有多列的重複項?

  1. 將MySQL的考慮(a1, b1, c1)(a1, b2, c2)重複?
  2. 如果T1本身有重複,MySQL會刪除這種重複嗎?
+0

重複的行中,所有列相等。所以(a1,b1,c1)不是(a1,b2,c2)的重複。但是如果你在T1或T2中有兩行(a1,b1,c1),或者其中一行在T1中而另一行在T2中,那麼你的結果集只有一行(a1,b1,c1)。 –

+0

只要想到兩個結果被附加在一起,然後一個獨特的運行。無論哪個表格有重複項目都被刪除。 – xQbert

回答

1

UNION(而不是UNION ALL)查詢期間,MySQL首先組合所有涉及的表中的記錄,然後刪除所有重複項。

考慮採取以下兩個表的UNION

table1 
col1 | col2 
1 | 1 
1 | 1 
2 | 2 
2 | 2 
3 | 4 

table2 
col1 | col2 
1 | 1 
1 | 1 
3 | 4 

考慮下面的查詢

SELECT * FROM table1 
UNION 
SELECT * FROM table2 

輸出會是這樣:

col1 | col2 
1 | 1 
2 | 2 
3 | 4 

換句話說,只要因爲(1, 1)在每個單獨的表格中重複並不意味着它在結果集中出現重複。該輸出僅與MySQL首先合併所有記錄並刪除重複項一致。這有副作用,如果一個記錄在其中一個表中出現重複,它也會被刪除。

演示在這裏:

Rextester