2017-06-05 4 views
0

Ich weiß, der Hauptunterschied zwischen UNION und ist die ehemalige entfernt doppelte Datensätze, während letztere alle hält. Meine Frage ist, wie UNION doppelten Datensatz entfernt, wenn es mehrere Spalten gibt? Zum Beispiel zur Vereinigung T1(A, B, C) und T2(A, B, C),Wie MySQL 'UNION' Duplikate mit mehreren Spalten entfernen?

  1. MySQL (a1, b1, c1) und (a1, b2, c2) Duplikate in Betracht ziehen?
  2. Wenn es in T1 selbst Duplikate gibt, wird MySQL diese Art von Duplikaten entfernen?
+0

Eine doppelte Reihe ist eine, in der alle Spalten gleich sind. Also (a1, b1, c1) ist kein Duplikat von (a1, b2, c2). Wenn Sie jedoch zwei Zeilen (a1, b1, c1) in T1 oder T2 oder eine der Zeilen in T1 und die andere in T2 hätten, dann würde Ihr Ergebnissatz nur eine Zeile (a1, b1, c1) enthalten. –

+0

Denken Sie nur daran, dass beide Ergebnisse zusammengefügt werden und dann ein eindeutiges Wesen ausgeführt wird. Es spielt keine Rolle, welche Tabelle Duplikate enthält ... alle werden entfernt. – xQbert

Antwort

1

Während eines UNION (kein UNION ALL) -Abfrage, MySQL verbindet zuerst die Datensätze aus allen beteiligten Tabellen und entfernt dann alle Duplikate.

Betrachten Sie die UNION der folgenden zwei Tabellen unter:

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

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

Betrachten Sie die folgende Abfrage

SELECT * FROM table1 
UNION 
SELECT * FROM table2 

Der Ausgang dieses wäre:

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

Mit anderen Worten, einfach weil (1, 1) in jeder separaten Tabelle doe dupliziert wurde S bedeutet nicht, dass es in der Ergebnismenge doppelt erscheint. Diese Ausgabe ist nur dann konsistent, wenn MySQL zuerst alle Datensätze kombiniert und dann die Duplikate entfernt. Dies hat den Nebeneffekt, dass wenn ein Datensatz in einer der Tabellen doppelt erscheint, er auch entfernt wird.

Demo hier:

Rextester