UNION можно использовать, явно указывая UNION ALL или UNION DISTINCT.
Если не указать ALL или DISTINCT, поведение будет зависеть от настройки union_default_mode. Разница между UNION ALL и UNION DISTINCT заключается в том, что UNION DISTINCT удаляет дубликаты в результате объединения; это эквивалентно SELECT DISTINCT из подзапроса, содержащего UNION ALL.
UNION можно использовать для объединения любого количества запросов SELECT, дополняя их результаты. Пример:
Query
SELECT). Если имена столбцов не совпадают, имена итогового результата берутся из первого запроса.
Для UNION выполняется приведение типов. Например, если у двух объединяемых запросов есть одно и то же поле с типами non-Nullable и Nullable совместимого типа, то в результирующем UNION это поле будет иметь тип Nullable.
Запросы, являющиеся частями UNION, могут быть заключены в (). ORDER BY и LIMIT применяются к отдельным запросам, а не к итоговому результату. Если вам нужно применить преобразование к итоговому результату, вы можете поместить все запросы с UNION в подзапрос в предложении FROM.
Если вы используете UNION без явного указания UNION ALL или UNION DISTINCT, вы можете задать режим union с помощью настройки union_default_mode. Значениями настройки могут быть ALL, DISTINCT или пустая строка. Однако если использовать UNION, когда для настройки union_default_mode задана пустая строка, будет сгенерировано исключение. Следующие примеры демонстрируют результаты запросов при разных значениях этой настройки.
Query
Response
Query
Response
UNION/UNION ALL/UNION DISTINCT могут выполняться одновременно, а их результаты — смешиваться.
См. также
- настройка insert_null_as_default.
- настройка union_default_mode.