Выбор ответа Middle JOIN обновлено
Чем опасен NATURAL JOIN
Вопрос
Запрос SELECT * FROM orders NATURAL JOIN customers работал, а после миграции стал возвращать почти пустой результат. Что вероятнее всего произошло?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Появилась общая колонка (например, createdat) и вошла в условие. NATURAL JOIN соединяет по всем колонкам с одинаковыми именами.
Варианты ответа
- NATURAL JOIN удалён в PostgreSQL 16 и работает как CROSS JOIN
- Миграция удалила индекс, и NATURAL JOIN перестал находить пары
- Появилась общая колонка (например,
created_at) и вошла в условиеправильный ответ - NATURAL JOIN работает только при одинаковом числе колонок
Разбор
NATURAL JOIN соединяет по всем колонкам с одинаковыми именами. Появилась общая колонка created_at, и теперь заказ склеивается с клиентом только при совпадении дат. Из PostgreSQL он никуда не делся, индексы влияют на скорость, а не на результат, а число колонок значения не имеет. Поэтому в боевом коде условия соединения пишут явно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.