Используйте EXISTS для проверки хотя бы одного недоставленного заказа у курьера. Это не размножит строки курьеров при нескольких таких заказах.
SQL‑запросы: поиск курьеров с недоставленными заказами
Используйте 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 и не считается недоставленным без отдельного требования.