Перейти к основному содержанию
UNION можно использовать, явно указывая UNION ALL или UNION DISTINCT. Если не указать ALL или DISTINCT, поведение будет зависеть от настройки union_default_mode. Разница между UNION ALL и UNION DISTINCT заключается в том, что UNION DISTINCT удаляет дубликаты в результате объединения; это эквивалентно SELECT DISTINCT из подзапроса, содержащего UNION ALL. UNION можно использовать для объединения любого количества запросов SELECT, дополняя их результаты. Пример:
Query
SELECT CounterID, 1 AS table, toInt64(count()) AS c
    FROM test.hits
    GROUP BY CounterID

UNION ALL

SELECT CounterID, 2 AS table, sum(Sign) AS c
    FROM test.visits
    GROUP BY CounterID
    HAVING c > 0
Итоговые столбцы сопоставляются по их индексу (порядку внутри 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
SET union_default_mode = 'DISTINCT';
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 2;
Response
┌─1─┐
│ 1 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 3 │
└───┘
Query
SET union_default_mode = 'ALL';
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 2;
Response
┌─1─┐
│ 1 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 3 │
└───┘
Запросы в составе UNION/UNION ALL/UNION DISTINCT могут выполняться одновременно, а их результаты — смешиваться. См. также
Последнее изменение 10 июня 2026 г.