Я работаю над проектом домашней работы и должен выполнить запрос к базе данных, который находит рейсы по названию города или коду аэропорта, но таблица 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!