Szukaj…


Składnia

  • UNION DISTINCT - deduplikacje po połączeniu SELECT
  • UNION ALL - bez deduplikacji (szybciej)
  • UNION - domyślnie jest DISTINCT
  • WYBIERZ ... WYBÓR UNII ... - jest OK, ale niejednoznaczny w przypadku ORDER BY
  • (WYBIERZ ...) UNIA (WYBIERZ ...) ORDER BY ... - rozwiązuje niejednoznaczność

Uwagi

UNION nie używa wielu procesorów.

UNION zawsze * obejmuje tabelę tymczasową do zbierania wyników. * Począwszy od 5.7.3 / MariaDB 10.1, niektóre formy UNION dostarczają wyniki bez użycia tabeli tmp (stąd szybsze).

Łączenie instrukcji SELECT z UNION

Możesz połączyć wyniki dwóch identycznie ustrukturyzowanych zapytań ze słowem kluczowym UNION .

Na przykład, jeśli chcesz listę wszystkich informacji kontaktowych z dwóch oddzielnych tabel, authors i editors , na przykład, możesz użyć słowa kluczowego UNION taki sposób:

select name, email, phone_number 
from authors

union

select name, email, phone_number
from editors

Samo użycie union usunie duplikaty. Jeśli chcesz zachować duplikaty w zapytaniu, możesz użyć słowa kluczowego ALL taki sposób: UNION ALL .

ZAMÓW PRZEZ

Jeśli chcesz posortować wyniki UNII, użyj tego wzorca:

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

Bez nawiasów końcowy ORDER BY należałby do ostatniego WYBORU.

Paginacja za pomocą OFFSET

Podczas dodawania LIMITU do UNII jest to wzorzec, którego należy użyć:

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

Ponieważ nie możesz przewidzieć, z których WYBRANYCH wybierze się „10”, musisz zdobyć po 10 z każdego z nich, a następnie dalej skracać listę, powtarzając zarówno ORDER BY i LIMIT .

Do czwartej strony z 10 elementów potrzebny jest ten wzór:

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

Oznacza to, że zbierz 4 strony w każdym SELECT , a następnie wykonaj OFFSET w UNION .

Łączenie danych z różnymi kolumnami

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

Łącząc 2 zestawy rekordów z różnymi kolumnami, emuluj brakujące z wartościami domyślnymi.

UNIA WSZYSTKO i UNIA

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

wprowadź opis zdjęcia tutaj

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

Wynik jest taki sam jak powyżej.

użyj UNION ALL

gdy

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

wprowadź opis zdjęcia tutaj

Łączenie i scalanie danych w różnych tabelach MySQL z tymi samymi kolumnami w unikalne wiersze i uruchamianie zapytań

Ten UNION ALL łączy dane z wielu tabel i służy jako alias nazwy tabeli do użycia w zapytaniach:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow