Есть две таблицы с одинаковой схемой: events_web(user_id, event_name, created_at) и events_app(user_id, event_name, created_at). Нужно получить общий поток событий для дальнейшей агрегации. Что использовать?

AINNER JOIN по user_id
BLEFT JOIN по user_id
CFULL JOIN по user_id
DUNION ALL между двумя выборками
Правильный ответ. UNION ALL «складывает» строки из двух источников вертикально; JOIN соединяет колонки горизонтально по ключу.

Разбор

Когда нужно объединить записи одинакового формата из разных источников (web и app), применяют операции над наборами: UNION/UNION ALL. JOIN используется для добавления атрибутов по ключу и не предназначен для «склейки» двух логов событий в один поток. Обычно берут UNION ALL, чтобы не терять повторяющиеся события и не тратить время на удаление дублей.

Проверь себя · 1/3разбор после ответа
Аналитик переписал запрос, поменяв порядок таблиц в цепочке JOIN. Запрос стал выполняться быстрее. Почему это могло произойти?
Тренировать SQL в Telegram

Ещё вопросы по теме «JOIN и операции множеств»