Recherche…


Syntaxe

  • UNION DISTINCT - déduit après avoir combiné les SELECT
  • UNION ALL - non dedup (plus rapide)
  • UNION - la valeur par défaut est DISTINCT
  • SELECT ... UNION SELECT ... - est OK, mais ambigu sur ORDER BY
  • (SELECT ...) UNION (SELECT ...) ORDER BY ... - résout l'ambiguïté

Remarques

UNION n'utilise pas plusieurs processeurs.

UNION toujours * implique une table temporaire pour collecter les résultats. * A partir de 5.7.3 / MariaDB 10.1, certaines formes d’UNION fournissent les résultats sans utiliser de table tmp (donc plus rapide).

Combiner les instructions SELECT avec UNION

Vous pouvez combiner les résultats de deux requêtes à structure identique avec le mot-clé UNION .

Par exemple, si vous vouliez une liste de toutes les informations de contact de deux tables, authors et editors distincts, par exemple, vous pourriez utiliser le mot-clé UNION comme suit:

select name, email, phone_number 
from authors

union

select name, email, phone_number
from editors

Utiliser l' union par elle-même supprimera les doublons. Si vous aviez besoin de conserver des doublons dans votre requête, vous pouvez utiliser le mot clé ALL comme suit: UNION ALL .

COMMANDÉ PAR

Si vous devez trier les résultats d'un UNION, utilisez ce modèle:

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

Sans les parenthèses, le dernier ORDER BY appartiendrait au dernier SELECT.

Pagination via OFFSET

Lorsque vous ajoutez une LIMITE à une UNION, c'est le modèle à utiliser:

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

Comme vous ne pouvez pas prédire quel (s) SELECT (s) le "10" va provenir, vous devez obtenir 10 pour chacun, puis réduire la liste, en répétant à la fois ORDER BY et LIMIT .

Pour la 4ème page de 10 articles, ce modèle est nécessaire:

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

Autrement dit, collectez 4 pages dans chaque SELECT , puis effectuez le OFFSET dans l’ UNION .

Combinaison de données avec différentes colonnes

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

Lors de la combinaison de 2 jeux d’enregistrements avec des colonnes différentes, émulez les éléments manquants avec des valeurs par défaut.

UNION ALL et UNION

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

entrer la description de l'image ici

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

Le résultat est le même que ci-dessus.

utiliser UNION ALL

quand

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

entrer la description de l'image ici

Combinaison et fusion de données sur différentes tables MySQL avec les mêmes colonnes en lignes uniques et requête en cours d'exécution

Cet UNION ALL combine des données provenant de plusieurs tables et sert d'alias de nom de table à utiliser pour vos requêtes:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow