Поиск…


Синтаксис

  • UNION DISTINCT - отчисления после объединения SELECT
  • UNION ALL - без дедуплирования (быстрее)
  • UNION - по умолчанию DISTINCT
  • SELECT ... UNION SELECT ... - это нормально, но неоднозначно на ORDER BY
  • (SELECT ...) UNION (SELECT ...) ORDER BY ... - устраняет двусмысленность

замечания

UNION не использует несколько процессоров.

UNION всегда * включает временную таблицу для сбора результатов. * Начиная с 5.7.3 / MariaDB 10.1, некоторые формы UNION предоставляют результаты без использования таблицы tmp (следовательно, быстрее).

Объединение операторов SELECT с UNION

Вы можете комбинировать результаты двух идентично структурированных запросов с ключевым словом UNION .

Например, если вам нужен список всех контактных данных из двух отдельных таблиц, authors и editors , например, вы можете использовать ключевое слово UNION так:

select name, email, phone_number 
from authors

union

select name, email, phone_number
from editors

Использование union само по себе будет вытеснять дубликаты. Если вам нужно сохранить дубликаты в своем запросе, вы можете использовать ключевое слово ALL так: UNION ALL .

СОРТИРОВАТЬ ПО

Если вам нужно отсортировать результаты UNION, используйте этот шаблон:

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

Без круглых скобок конечный ORDER BY будет принадлежать последнему SELECT.

Разбиение страницы с помощью OFFSET

При добавлении LIMIT в UNION это шаблон для использования:

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

Поскольку вы не можете предсказать, какие из SELECT (s) будут иметь значение «10», вам нужно получить 10 из каждого, а затем еще больше уничтожить список, повторяя оба ORDER BY и LIMIT .

Для 4-й страницы из 10 элементов этот шаблон необходим:

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

То есть, собрать 4 страницы в каждом SELECT , а затем сделать OFFSET в UNION .

Объединение данных с разными столбцами

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

При объединении двух наборов записей с разными столбцами, эмулируйте отсутствующие значения по умолчанию.

UNION ALL и UNION

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

введите описание изображения здесь

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

Результат такой же, как и выше.

использовать UNION ALL

когда

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

введите описание изображения здесь

Объединение и объединение данных в разные таблицы MySQL с одинаковыми столбцами в уникальные строки и выполнение запроса

Этот UNION ALL объединяет данные из нескольких таблиц и служит псевдонимом имени таблицы для использования в ваших запросах:

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow