Ricerca…


Sintassi

  • UNION DISTINCT: deduplica dopo aver combinato i SELECT
  • UNION ALL - non dedup (più veloce)
  • UNION - il valore predefinito è DISTINCT
  • SELEZIONA ... UNION SELECT ... - è OK, ma ambiguo su ORDER BY
  • (SELEZIONA ...) UNIONE (SELEZIONA ...) ORDINA PER ... - risolve l'ambiguità

Osservazioni

UNION non usa più CPU.

UNION sempre * comporta una tabella temporanea per raccogliere i risultati. * A partire da 5.7.3 / MariaDB 10.1, alcune forme di UNION forniscono i risultati senza utilizzare una tabella tmp (quindi, più veloce).

Combinare le istruzioni SELECT con UNION

È possibile combinare i risultati di due query identicamente strutturate con la parola chiave UNION .

Ad esempio, se si desidera un elenco di tutte le informazioni di contatto da due tabelle separate, authors e editors , ad esempio, è possibile utilizzare la parola chiave UNION modo:

select name, email, phone_number 
from authors

union

select name, email, phone_number
from editors

L'utilizzo union da sola eliminerà i duplicati. Se dovessi conservare i duplicati nella tua query, potresti utilizzare la parola chiave ALL modo: UNION ALL .

ORDINATO DA

Se è necessario ordinare i risultati di UNION, utilizzare questo modello:

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

Senza le parentesi, l'ORDER BY finale apparterrebbe all'ultima SELECT.

Paginazione tramite OFFSET

Quando si aggiunge un LIMIT a UNION, questo è il modello da utilizzare:

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

Dal momento che non è possibile prevedere quale / i SELEZIONA / i arriverà il "10", sarà necessario ottenere 10 da ciascuno, quindi ridurre ulteriormente l'elenco, ripetendo sia ORDER BY che LIMIT .

Per la quarta pagina di 10 articoli, questo modello è necessario:

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

Vale a dire, raccogliere il valore di 4 pagine in ciascuna SELECT , quindi eseguire lo OFFSET UNION .

Combinare i dati con colonne diverse

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

Quando si combinano 2 set di record con colonne diverse, emulare quelli mancanti con i valori predefiniti.

UNIONE TUTTI e UNIONE

SELEZIONA 1,22,44 UNIONE SELEZIONA 2,33,55

inserisci la descrizione dell'immagine qui

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

Il risultato è lo stesso di sopra.

usa UNION ALL

quando

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

inserisci la descrizione dell'immagine qui

Combinazione e fusione dei dati su diverse tabelle MySQL con le stesse colonne in righe univoche e query in esecuzione

Questo UNION ALL combina i dati di più tabelle e funge da alias di nome tabella da utilizzare per le query:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow