Тройная вложенность

511
30 декабря 2016, 13:31

Есть 3 таблицы: с рейсами самолетов flight, с названиями аэропортов airport и с названиями городов city. Нужно взять один из рейсов и узнать город вылета и город прилет.

в таблице flight аэропорты обозначены fromAirport и toAirport эти коды соответствуют airport.code. У каждого airport.code есть свой airport.cityCode. Далее по этому cityCode нужно выбрать город city.code. У каждого city.code есть свой city.name его то мне и нужно взять. Такая вот тройная вложенность.

Подскажите как это сделать одним запросом?

UPD

Пробовал использовать вот такой запрос:

SELECT * FROM flights, airport, city
  WHERE flights.fromAirport = airport.code AND flights.toAirport = airport.code
  ORDER BY flights.upload DESC
  LIMIT 1;

Как сюда третью таблицу впихать - понятия не имею.

Answer 1
SELECT f.flightNumber, cF.name townFrom, cT.name townTo
FROM flight f, airport aF, airport aT, city cF, city cT
WHERE f.fromAirport = aF.code 
  AND aF.cityCode = cF.code
  AND f.toAirport = aT.code 
  AND aT.cityCode = cT.code
-- AND f.flightNumber IN (123,456,789)
Answer 2

Вариант с использованием конструкции JOIN:

SELECT f.code, cf.name AS fromCity, ct.name AS toCity FROM flight f
    INNER JOIN airport afrom ON f.fromAirport = afrom.code
    INNER JOIN airport ato ON f.toAirport = ato.code
    INNER JOIN city cf ON afrom.cityCode = cf.code
    INNER JOIN city ct ON ato.cityCode = ct.code
ORDER BY f.code;

А вот и рабочий пример на SQLFiddle.

Answer 3

У вас должно быть примерно так:

SELECT name  FROM city 
JOIN airport ON city.code=airport.cityCode
JOIN flights ON airport.code=flights.fromAirport
WHERE flights.fromAirport=12345
READ ALSO
Как сделать вывод в таблице разделяя строки по датам?

Как сделать вывод в таблице разделяя строки по датам?

Есть обычная таблица в ней есть поле дата (лишний столбик занимает)

329
Как вытащить из массива значения SxGeo

Как вытащить из массива значения SxGeo

Вот массив нужно получить переменную страна и город?

393
Как в TestLink создать общедоступный тесткейс?

Как в TestLink создать общедоступный тесткейс?

Как в TestLink создать общедоступный тесткейс, чтобы все юзеры могли просматривать тесткейс, но не имели возможности редактироватьИли дайте...

341
Проверка на дублирование БД

Проверка на дублирование БД

Создаю html форму в которой элементы выпадающего списка будут данные из столбца в нашей таблицеПример кода:

349