У вас есть два набора пользователей одного типа: new_users_ru(user_id) и new_users_kz(user_id). Нужно получить общий список пользователей для дальнейшего соединения с orders. Что сделать на первом шаге?
A
SELECT user_id FROM new_users_ru UNION SELECT user_id FROM new_users_kz;B
SELECT r.user_id FROM new_users_ru r INNER JOIN new_users_kz k ON r.user_id = k.user_id;C
SELECT r.user_id FROM new_users_ru r LEFT JOIN new_users_kz k ON r.user_id = k.user_id;D
SELECT r.user_id, k.user_id FROM new_users_ru r CROSS JOIN new_users_kz k;Правильный ответ. Когда нужно объединить однотипные строки из двух таблиц в один список, используют
UNION или UNION ALL, а не JOIN.Разбор
UNION складывает два набора пользователей в один список и убирает дубликаты, UNION ALL сохраняет повторы. Любой JOIN между таблицами решает другую задачу — он сопоставляет строки по ключу: INNER JOIN даст только пересечение, LEFT JOIN склеит значения только справа, CROSS JOIN вернёт декартово произведение. Ни один из этих вариантов не даёт нужный объединённый список пользователей.
Можно заниматься бесплатно
Готовим вопросы…
Три вопроса по теме этой страницы, с объяснениями.
Ещё вопросы по теме «JOIN и операции множеств»
- В отчёте нужно вывести всех пользователей и количество их заказов, включая тех, у кого заказов нет. Какой тип соединения между `users` и `orders` по `user_id` нужен?
- Нужно посчитать число пользователей, которые сделали хотя бы 1 заказ (таблицы `users(user_id)` и `orders(user_id, order_id)`). Какой запрос посчитает правильно?
- Вы соединили заказы с `order_items` и `payments` по `order_id`, а потом посчитали `SUM(paid_amount)`. Сумма оказалась завышенной. Что вероятнее всего произошло и как исправить?
- Есть две таблицы с одинаковой схемой: `events_web(user_id, event_name, created_at)` и `events_app(user_id, event_name, created_at)`. Нужно получить общий поток событий для дальнейшей агрегации. Что использовать?
- Нужно получить уникальный список идентификаторов пользователей из двух каналов: `campaign_a(user_id)` и `campaign_b(user_id)`. Как корректнее объединить списки, чтобы убрать дубликаты?
- Все вопросы по «JOIN и операции множеств» →