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

AПрименить FULL OUTER JOIN по product_id плюс COALESCE(a.product_id, b.product_id) для выбора не-NULL ключа
BПрименить INNER JOIN по product_id: он покажет товары, которые есть только в одной из систем сразу автоматически
CПрименить LEFT JOIN в обе стороны и склеить результаты через UNION ALL без дедупликации совпадающих ключей
DПрименить CROSS JOIN и отфильтровать в WHERE строки, где a.product_id отличается от b.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) нужен, чтобы получить идентификатор независимо от того, в какой таблице товар присутствует. INNER JOIN отбросит односторонние товары, UNION ALL без дедупликации удвоит совпадения, а CROSS JOIN создаст лишние комбинации.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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