Sök…


Syntax

  • UNION DISTINCT - deduktioner efter kombination av SELECT
  • UNION ALL - icke dedup (snabbare)
  • UNION - standard är DISTINCT
  • VÄLJ ... UNION VÄLJ ... - är OK, men tvetydig med ORDER BY
  • (VÄLJ ...) UNION (VÄLJ ...) BESTÄLLNING AV ... - löser tvetydigheten

Anmärkningar

UNION använder inte flera CPU: er.

UNION involverar alltid en temptabell för att samla in resultaten. * Från och med 5.7.3 / MariaDB 10.1 levererar vissa former av UNION resultaten utan att använda en tmp-tabell (därmed snabbare).

Kombinera SELECT uttalanden med UNION

Du kan kombinera resultaten från två identiskt strukturerade frågor med sökordet UNION .

Om du till exempel ville ha en lista med all kontaktinformation från två separata tabeller, authors och editors , till exempel, kan du använda UNION sökordet så:

select name, email, phone_number 
from authors

union

select name, email, phone_number
from editors

Att använda union sig kommer att ta bort dubbletter. Om du behövde behålla duplikat i din fråga kan du använda ALL nyckelordet så: UNION ALL .

SORTERA EFTER

Om du behöver sortera resultaten från en UNION, använd detta mönster:

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

Utan parenteser skulle den sista ORDER BY tillhöra den sista VÄLJ.

Pagination via OFFSET

När du lägger till en BEGRÄNSNING till en UNION är detta mönstret att använda:

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

Eftersom du inte kan förutsäga vilka VÄLJ (er) kommer "10" kommer från, måste du få 10 från vardera, sedan vidare nedför listan, upprepa både ORDER BY och LIMIT .

För den fjärde sidan av 10 artiklar behövs detta mönster:

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

Det vill säga, samla in 4 sidor i varje SELECT och gör sedan OFFSET i UNION .

Kombinera data med olika kolumner

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

När du kombinerar två postuppsättningar med olika kolumner, emulera sedan de saknade med standardvärden.

UNION ALL och UNION

VÄLJ 1,22,44 UNION SELECT 2,33,55

ange bildbeskrivning här

VÄLJ 1,22,44 UNION VÄLJ 2,33,55 UNION VÄLJ 2,33,55

Resultatet är detsamma som ovan.

använd UNION ALL

när

VÄLJ 1,22,44 UNION VÄLJ 2,33,55 UNION ALLA VÄLJ 2,33,55

ange bildbeskrivning här

Kombinera och slå samman data på olika MySQL-tabeller med samma kolumner i unika rader och körfråga

Denna UNION ALL kombinerar data från flera tabeller och fungerar som ett tabellnamnalias för dina frågor:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow