MySQL
UNIA
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
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
Łą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);