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