Найти пилотов, летавших вторыми пилотами в New York в августе 2023

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, без дубликатов.

Код:

-- Напишите запрос

Спойлеры к решению

Подсказки
💡 В условии есть несоответствие: в описании таблицы 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.