0
我知道UNION
和UNION ALL
之間的主要區別是前者刪除重複的記錄,而後者保留所有的記錄。我的問題是如何在UNION
刪除重複的記錄,如果有多列?例如,工會T1(A, B, C)
和T2(A, B, C)
,MySQL的'UNION'如何刪除具有多列的重複項?
- 將MySQL的考慮
(a1, b1, c1)
和(a1, b2, c2)
重複? - 如果T1本身有重複,MySQL會刪除這種重複嗎?
我知道UNION
和UNION ALL
之間的主要區別是前者刪除重複的記錄,而後者保留所有的記錄。我的問題是如何在UNION
刪除重複的記錄,如果有多列?例如,工會T1(A, B, C)
和T2(A, B, C)
,MySQL的'UNION'如何刪除具有多列的重複項?
(a1, b1, c1)
和(a1, b2, c2)
重複?在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首先合併所有記錄並刪除重複項一致。這有副作用,如果一個記錄在其中一個表中出現重複,它也會被刪除。
演示在這裏:
重複的行中,所有列相等。所以(a1,b1,c1)不是(a1,b2,c2)的重複。但是如果你在T1或T2中有兩行(a1,b1,c1),或者其中一行在T1中而另一行在T2中,那麼你的結果集只有一行(a1,b1,c1)。 –
只要想到兩個結果被附加在一起,然後一個獨特的運行。無論哪個表格有重複項目都被刪除。 – xQbert