SQL UNION и UNION ALL: объединить результаты

Категория: Postgresql · Язык: SQL · Обновлено:

UNION ALL складывает строки двух запросов и сохраняет дубликаты; UNION дополнительно удаляет дубли, что требует сортировки или другого шага обработки. Если уникальность не нужна, выбирайте UNION ALL — он обычно дешевле.

Объединить два набора без удаления повторов

SQL
SELECT 'web' AS source, 10 AS user_id
UNION ALL
SELECT 'mobile' AS source, 10 AS user_id;

Результат содержит обе строки, хотя user_id совпадает.

Удалить полностью одинаковые строки

SQL
SELECT user_id FROM (VALUES (10), (20)) AS web(user_id)
UNION
SELECT user_id FROM (VALUES (10), (30)) AS mobile(user_id);

Результат содержит 10, 20, 30; повторяющаяся строка 10 появляется один раз.

Оператор

Дубликаты

Когда использовать

UNION ALL

Сохраняет

Нужны все строки

UNION

Удаляет совпадающие строки целиком

Нужен уникальный итог

У запросов должно совпадать количество столбцов и совместимость типов в соответствующих позициях. Имена результирующих столбцов берутся из первого SELECT.

Удаляет ли UNION одинаковые значения только в одном поле?

Он удаляет полностью одинаковые строки результата. Если нужны уникальные пользователи, выберите только user_id или отдельно сгруппируйте результат.