SQL‑запросы: поиск курьеров с недоставленными заказами

Используйте EXISTS для проверки хотя бы одного недоставленного заказа у курьера. Это не размножит строки курьеров при нескольких таких заказах.

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

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

Используйте EXISTS для проверки хотя бы одного недоставленного заказа у курьера. Это не размножит строки курьеров при нескольких таких заказах.

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

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

Условие

Составьте запрос, который выводит всех курьеров, работающих в городе Санкт‑Петербург, и у которых имеется хотя бы один заказ со статусом NOT_DELIVERED.

CREATE TABLE orders (
    id INT,
    courier_id INT,
    status VARCHAR(20)
);

CREATE TABLE couriers (
    id INT,
    city VARCHAR(100)
);

Ответ

Используйте EXISTS для проверки хотя бы одного недоставленного заказа у курьера. Это не размножит строки курьеров при нескольких таких заказах.

SELECT c.*
FROM couriers c
WHERE c.city = 'Санкт-Петербург'
  AND EXISTS (
      SELECT 1
      FROM orders o
      WHERE o.courier_id = c.id
        AND o.status = 'NOT_DELIVERED'
  );

Предполагается, что город хранится именно такой строкой. Для поиска по заказам полезен индекс orders(courier_id, status), а необходимость индекса города зависит от распределения данных. NULL в status не соответствует NOT_DELIVERED и не считается недоставленным без отдельного требования.

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

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

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

Подробнее