В таблице 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 считать метрики, которые должны быть на уровне заказа, без учёта дублирования строк.

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

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

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

Открыть Карьерник в браузере

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