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

AБудет 120 строк, потому что JOIN по order_id не должен менять число строк левой таблицы
BБудет 480 строк, потому что результат JOIN равен сумме строк двух таблиц: 120 плюс 360
CБудет 360 строк, потому что это соединение один-ко-многим и каждой строке orders соответствует 3 строки в order_items
DБудет 3 строки, потому что в каждом заказе ровно три позиции и JOIN сворачивает их в строки заказа
Правильный ответ. При соотношении один-ко-многим после JOIN количество строк обычно становится равным числу строк в «многой» стороне.

Разбор

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

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

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