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