У вас есть два набора пользователей одного типа: new_users_ru(user_id) и new_users_kz(user_id). Нужно получить общий список пользователей для дальнейшего соединения с orders. Что сделать на первом шаге?

ASELECT user_id FROM new_users_ru UNION SELECT user_id FROM new_users_kz;
BSELECT r.user_id FROM new_users_ru r INNER JOIN new_users_kz k ON r.user_id = k.user_id;
CSELECT r.user_id FROM new_users_ru r LEFT JOIN new_users_kz k ON r.user_id = k.user_id;
DSELECT 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 и операции множеств»