Я работаю над проектом домашней работы, и я должен выполнить запрос к базе данных, который находит рейсы либо по названию города, либо по коду аэропорта, но 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!
Ответы:
Вы можете присоединиться к одной и той же таблице более одного раза, указав псевдоним объединенным таблицам , как в следующем примере:
Обратите внимание, что
to_port
иfrom_port
являются псевдонимами для первой и второй копийairports
таблицы.источник
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
пожалуйста, предложите.что-то вроде....
источник
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
это имеет значение? Что вы думаете?если mysql в порядке для вас:
edit: добавлен пример для фильтрации вывода по коду или городу
источник
Вы можете просто использовать и в предложении on?
Например, что-то вроде:
источник
Если вы хотите выполнять поиск как в аэропортах FROM, так и в аэропортах TO, вам нужно будет дважды присоединиться к таблице «Аэропорты» - тогда вы можете использовать таблицы «из» и «в» в своем наборе результатов:
источник