71. Найти пилотов, летавших вторыми пилотами в New York в августе 2023
Условие задачи:
📌 Даны таблицы:
pilots
- pilot_id (PK)
- name
- age
planes
- plane_id (PK)
- plane_name
- capacity
- cargo_flag
flights
- flight_id (PK)
- flight_date (DATE)
- plane_id -> planes.plane_id
- first_pilot_id -> pilots.pilot_id
- destination
Нужно написать SQL-запрос, который выведет имена пилотов, которые в качестве второго пилота (second_pilot_id) в августе 2023 года летали в New York.
Результат должен содержать только поле name, без дубликатов.
Код:
-- Напишите запрос
Спойлеры к решению
Подсказки
💡 В условии есть несоответствие: в описании таблицы
💡 Значит, либо в схеме пропущено поле
💡 Если считать, что поле
💡 Чтобы убрать дубликаты, используй
💡 Для августа 2023 удобнее фильтровать диапазоном дат: от
flights нет поля second_pilot_id, но задача требует искать именно по нему.💡 Значит, либо в схеме пропущено поле
second_pilot_id, либо в условии ошибка.💡 Если считать, что поле
second_pilot_id должно быть в flights, то нужен JOIN таблиц flights и pilots.💡 Чтобы убрать дубликаты, используй
DISTINCT.💡 Для августа 2023 удобнее фильтровать диапазоном дат: от
2023-08-01 включительно до 2023-09-01 не включительно.Решение
SELECT DISTINCT p.name
FROM flights f
JOIN pilots p ON p.pilot_id = f.second_pilot_id
WHERE f.destination = 'New York'
AND f.flight_date >= DATE '2023-08-01'
AND f.flight_date < DATE '2023-09-01';
В схеме, скорее всего, пропущено поле
second_pilot_id. Если оно действительно есть в таблицеflights, то решение — сделатьJOINпоsecond_pilot_id, отфильтровать август 2023 иNew York, а затем вернутьDISTINCT name.