Есть 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;
Как сюда третью таблицу впихать - понятия не имею.
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)
Вариант с использованием конструкции 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.
У вас должно быть примерно так:
SELECT name FROM city
JOIN airport ON city.code=airport.cityCode
JOIN flights ON airport.code=flights.fromAirport
WHERE flights.fromAirport=12345
Сборка персонального компьютера от Artline: умный выбор для современных пользователей