Я працюю над проектом домашнього завдання, і я повинен виконувати запит до бази даних, який знаходить рейси або за назвою міста, або з кодом аеропорту, але flights
таблиця містить лише коди аеропортів, тому якщо я хочу шукати по місту, я повинен приєднайтеся до airports
столу.
Таблиця аеропортів мають такі стовпці: code, city
Таблиця польотів мають такі стовпці: airline, flt_no, fairport, tairport, depart, arrive, fare
Стовпці fairport
і tairport
є від і до кодів аеропортів.
Графи depart
і arrive
дати відправлення та прибуття.
Я придумав запит, який спочатку приєднує рейси до fairport
колони та airports.code
колони. Для того, щоб я відповідав tairport
мені, я маю здійснити ще одне приєднання на попередніх матчах з першого поєднання.
SELECT airline, flt_no, fairport, tairport, depart, arrive, fare
FROM (SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code
WHERE (airports.code = '?' OR airports.city='?')) AS matches
INNER JOIN airports
ON matches.tairport = airports.code
WHERE (airports.code = '?' OR airports.city = '?')
Мій запит повертає належні результати, і цього буде достатньо для виконання домашнього завдання, але мені цікаво, чи зможу я виконати JOIN
декілька стовпців? Як я б побудував WHERE
застереження так, щоб воно відповідало відправленням та місту / коду призначення?
Нижче наводиться "псевдо-запит" про те, що я хочу отримати, але я не можу правильно зрозуміти синтаксис, і я не знаю, як представити airports
таблицю для відправлень та пунктів призначення:
SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code AND flights.tairport = airports.code
WHERE (airports.code = 'departureCode' OR airports.city= 'departureCity')
AND (airports.code = 'destinationCode' OR airports.city = 'destinationCity')
Оновлення
Я також виявив, що це візуальне представлення операторів SQL Join є дуже корисним як загальне керівництво щодо побудови операторів SQL!