Нужно сверить остатки товаров между учётной системой и складской. Некоторые товары есть только в одной из систем. Как получить полный список расхождений?

AИспользовать FULL OUTER JOIN по product_id и COALESCE для выбора не-NULL значения идентификатора
BИспользовать INNER JOIN по product_id — он автоматически покажет расхождения между системами
CИспользовать LEFT JOIN в обе стороны и объединить результаты через UNION без дедупликации
DИспользовать CROSS JOIN и в WHERE отфильтровать строки, где product_id не совпадает
Правильный ответ. FULL OUTER JOIN сохраняет строки из обеих таблиц. COALESCE(a.product_id, b.product_id) гарантирует, что идентификатор не потеряется, даже если товар есть только в одной системе.

Разбор

FULL OUTER JOIN объединяет все строки: совпавшие по ключу, строки только из левой таблицы (с NULL справа) и строки только из правой (с NULL слева). Для сверки добавляют WHERE a.qty IS DISTINCT FROM b.qty — это покажет расхождения. COALESCE(a.product_id, b.product_id) нужен, чтобы получить идентификатор товара независимо от того, в какой таблице он присутствует.

Проверь себя · 1/3разбор после ответа
Какое утверждение про RIGHT JOIN верно в аналитических запросах?
Тренировать SQL в Telegram

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