Buscar..


Sintaxis

  • UNION DISTINCT - Deducciones después de combinar los SELECTs
  • UNION ALL - no dedup (más rápido)
  • UNION - el valor predeterminado es DISTINCT
  • SELECT ... UNION SELECT ... - está bien, pero es ambiguo en ORDER BY
  • (SELECCIONAR ...) UNIÓN (SELECCIONAR ...) ORDENAR POR ... - resuelve la ambigüedad

Observaciones

UNION no usa múltiples CPUs.

UNION siempre * implica una tabla temporal para recopilar los resultados. * A partir de 5.7.3 / MariaDB 10.1, algunas formas de UNION entregan los resultados sin usar una tabla tmp (por lo tanto, más rápido).

Combinando sentencias SELECT con UNION

Puede combinar los resultados de dos consultas idénticamente estructuradas con la palabra clave UNION .

Por ejemplo, si desea una lista de toda la información de contacto de dos tablas separadas, authors y editors , por ejemplo, puede usar la palabra clave UNION manera:

select name, email, phone_number 
from authors

union

select name, email, phone_number
from editors

Usar la union por sí misma eliminará los duplicados. Si necesita mantener duplicados en su consulta, puede usar la palabra clave ALL así: UNION ALL .

ORDEN POR

Si necesita ordenar los resultados de una UNION, use este patrón:

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

Sin los paréntesis, el último ORDEN POR pertenecería al último SELECCIONAR.

Paginación via OFFSET

Al agregar un LÍMITE a una UNIÓN, este es el patrón a utilizar:

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

Como no puede predecir de qué SELECT (s) vendrá el "10", necesita obtener 10 de cada uno, luego reduzca la lista, repitiendo ORDER BY y LIMIT .

Para la 4ta página de 10 artículos, este patrón es necesario:

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

Es decir, recopile el valor de 4 páginas en cada SELECT , luego haga la OFFSET en la UNION .

Combinando datos con diferentes columnas.

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

Al combinar 2 conjuntos de registros con diferentes columnas, emule los que faltan con los valores predeterminados.

UNION ALL Y UNION

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

introduzca la descripción de la imagen aquí

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

El resultado es el mismo que el de arriba.

usa UNION ALL

cuando

SELECCIONE 1,22,44 UNION SELECCIONE 2,33,55 UNION TODO SELECCIONE 2,33,55

introduzca la descripción de la imagen aquí

Combinar y combinar datos en diferentes tablas de MySQL con las mismas columnas en filas únicas y ejecutar la consulta

Este UNION ALL combina datos de varias tablas y sirve como un alias de nombre de tabla para usar en sus consultas:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow