Suche…


Syntax

  • UNION DISTINCT - Dedups nach dem Kombinieren der SELECTs
  • UNION ALL - nicht deduziert (schneller)
  • UNION - Die Standardeinstellung ist DISTINCT
  • SELECT ... UNION SELECT ... - ist OK, aber bei ORDER BY mehrdeutig
  • (SELECT ...) UNION (SELECT ...) ORDER BY ... - löst die Mehrdeutigkeit auf

Bemerkungen

UNION verwendet nicht mehrere CPUs.

UNION * beinhaltet immer eine temporäre Tabelle, um die Ergebnisse zu sammeln. * Ab 5.7.3 / MariaDB 10.1 liefern einige Formen von UNION die Ergebnisse ohne Verwendung einer tmp-Tabelle (daher schneller).

SELECT-Anweisungen mit UNION kombinieren

Sie können die Ergebnisse von zwei identisch strukturierten Abfragen mit dem Schlüsselwort UNION kombinieren.

Wenn Sie beispielsweise eine Liste aller Kontaktinformationen aus zwei separaten Tabellen, authors und editors möchten, können Sie das UNION Schlüsselwort wie folgt verwenden:

select name, email, phone_number 
from authors

union

select name, email, phone_number
from editors

Durch die Verwendung von union werden Duplikate entfernt. Wenn Sie in Ihrer Abfrage Duplikate beibehalten müssen, können Sie das ALL Schlüsselwort wie UNION ALL : UNION ALL .

SORTIEREN NACH

Wenn Sie die Ergebnisse einer UNION sortieren müssen, verwenden Sie dieses Muster:

( SELECT ... )
UNION
( SELECT ... )
ORDER BY

Ohne die Klammern würde das letzte ORDER BY zum letzten SELECT gehören.

Paginierung über OFFSET

Beim Hinzufügen eines LIMIT zu einer UNION ist dies das zu verwendende Muster:

( SELECT ... ORDER BY x  LIMIT 10 )
UNION
( SELECT ... ORDER BY x  LIMIT 10 )
ORDER BY x  LIMIT 10

Da Sie nicht vorhersagen können, aus welchen SELECT (s) die "10" kommt, müssen Sie jeweils 10 davon erhalten und dann die Liste weiter unten durchlaufen, wobei sowohl ORDER BY als auch LIMIT wiederholt werden.

Für die 4. Seite von 10 Elementen wird dieses Muster benötigt:

( SELECT ... ORDER BY x  LIMIT 40 )
UNION
( SELECT ... ORDER BY x  LIMIT 40 )
ORDER BY x  LIMIT 30, 10

Das heißt, sammeln Sie in jeder SELECT 4 Seitenwerte und führen Sie dann OFFSET in der UNION .

Daten mit unterschiedlichen Spalten kombinieren

SELECT name, caption as title, year, pages FROM books 
UNION
SELECT name, title, year, 0 as pages FROM movies

Wenn Sie zwei Datensätze mit unterschiedlichen Spalten kombinieren, dann emulieren Sie die fehlenden mit Standardwerten.

UNION ALL und UNION

SELECT 1,22,44 UNION SELECT 2,33,55

Geben Sie hier die Bildbeschreibung ein

SELECT 1,22,44 UNION SELECT 2,33,55 UNION SELECT 2,33,55

Das Ergebnis ist das gleiche wie oben.

Verwenden Sie UNION ALL

wann

SELECT 1,22,44 UNION SELECT 2,33,55 UNION ALL SELECT 2,33,55

Geben Sie hier die Bildbeschreibung ein

Kombinieren und Kombinieren von Daten in verschiedenen MySQL-Tabellen mit denselben Spalten in eindeutigen Zeilen und Ausführen der Abfrage

Dieses UNION ALL-System kombiniert Daten aus mehreren Tabellen und dient als Tabellennamensalias für Ihre Abfragen:

SELECT YEAR(date_time_column), MONTH(date_time_column), MIN(DATE(date_time_column)), MAX(DATE(date_time_column)), COUNT(DISTINCT (ip)), COUNT(ip), (COUNT(ip) / COUNT(DISTINCT (ip))) AS Ratio
FROM (
    (SELECT date_time_column, ip FROM server_log_1 WHERE state = 'action' AND log_id = 150) UNION ALL
    (SELECT date_time_column, ip FROM server_log_2 WHERE state = 'action' AND log_id = 150) UNION ALL
    (SELECT date_time_column, ip FROM server_log_3 WHERE state = 'action' AND log_id = 150) UNION ALL
    (SELECT date_time_column, ip FROM server_log WHERE state = 'action' AND log_id = 150)
) AS table_all
GROUP BY YEAR(date_time_column), MONTH(date_time_column);


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow