В orders 120 строк (по одной на order_id). В order_items ровно по 3 строки на каждый order_id. Сколько строк будет после соединения ordersorder_items по order_id и почему?

A360, потому что это one-to-many и строк станет столько же, сколько в order_items
B120, потому что JOIN не меняет число строк
C3, потому что на заказ три позиции
D480, потому что 120 + 360
Правильный ответ. При one-to-many JOIN количество строк обычно становится равным числу строк в «многой» стороне.

Разбор

Каждая строка из orders соединится с 3 строками из order_items, поэтому получится 120 * 3 = 360 строк. Это нормальное поведение по cardinality и не является ошибкой само по себе. Ошибка появляется, если после такого JOIN считать метрики, которые должны быть на уровне заказа, без учёта duplication.

Проверь себя · 1/3разбор после ответа
Вы считаете «уникальные покупатели по бренду». Данные: order_items(user_id, product_id) и products(product_id, brand). Пользователь может купить несколько товаров одного бренда. Какой расчёт на объединённых данных соответствует цели и устойчив к duplication?
Открыть Карьерник в Telegram

Ещё вопросы по теме «JOIN и кардинальность»