Как LEFT JOIN меняет подсчёт попыток кампании?

INNER JOIN вернёт только кампанию 1 со счётчиком 2. LEFT JOIN добавит кампанию 2 со счётчиком 0 при COUNT(m.id), но со счётчиком 1 при COUNT(*).

Короткий ответ

Что ответить на собеседовании

INNER JOIN вернёт только кампанию 1 со счётчиком 2. LEFT JOIN добавит кампанию 2 со счётчиком 0 при COUNT(m.id), но со счётчиком 1 при COUNT(*).

Подробный разбор

Ответ с пояснениями

Условие

Даны campaigns(id) со строками 1, 2 и communications(id, campaign_id) со строками (10,1), (11,1). Сравните результат SELECT c.id, COUNT(m.id) FROM campaigns c JOIN communications m ON m.campaign_id=c.id GROUP BY c.id с вариантом LEFT JOIN. Что произойдёт при COUNT(*)?

Ответ

INNER JOIN вернёт только кампанию 1 со счётчиком 2. LEFT JOIN добавит кампанию 2 со счётчиком 0 при COUNT(m.id), но со счётчиком 1 при COUNT(*).

LEFT JOIN сохраняет строку левой таблицы даже без совпадения, заполняя правые поля NULL. COUNT(m.id) пропускает NULL, а COUNT(*) считает созданную строку. Логически сначала выполняются FROM/JOIN, затем GROUP BY и агрегаты, затем формируется SELECT; ORDER BY и LIMIT применяются после него. Это логическая модель результата, не обещание конкретного физического плана выполнения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее