2015-07-22 5 views
0

У меня есть две таблицы, одна содержит список аэропортов аэропортов и время, чтобы добраться до них. Другой содержит отображение от planeID к авиакомпаниям.mysql получение результата из одной таблицы для запроса в другом

Таблица: plane_dist

+----------+-----------+--------+ 
| PlaneID | AirportID | Time | 
+----------+-----------+--------+ 
| P234567 | A12312 | 1.2 | 
| P234567 | A12315 | 1.1 | 
+----------+-----------+--------+ 

Таблица: plane_mapping

+----------+--------------------+-----------+--------------------+ 
| PlaneID | Airline   | AirportID | Location   | 
+----------+--------------------+-----------+--------------------+ 
| P234567 | American Airlines | A12312 | Los Angeles  | 
| P234566 | Delta Airlines  | A12315 | San Diego   | 
+----------+--------------------+-----------+--------------------+ 

Дано Авиакомпанию Мне нужно вернуть местоположения аэропортов могут идти, времена.

Я попытался, но всегда возвращает пустой набор:

SELECT plane_dist.Time, plane_mapping.Airline 
FROM plane_dist JOIN plane_mapping 
    on plane_dist.AirportID = plane_mapping.AirportID 
WHERE 
    plane_dist.PlaneID= 
    (SELECT DISTINCT PlaneID FROM plane_mapping WHERE Airline=('American Airlines')); 

Я попробовал два запроса по отдельности, и они возвращают ожидаемые результаты:

SELECT plane_dist.Time, plane_mapping.Airline 
    FROM plane_dist JOIN plane_mapping 
     on plane_dist.AirportID = plane_mapping.AirportID 
    WHERE 
     plane_dist.PlaneID=('P234567'); 

SELECT DISTINCT PlaneID 
FROM plane_mapping WHERE Airline=('American Airlines'); 

Мои вопросы, как я это делаю и почему моя попытка вернуть пустой набор?

ответ

0

Попробуйте следующее:

SELECT plane_dist.Time, plane_mapping.Airline 
FROM plane_dist JOIN plane_mapping 
on plane_dist.AirportID = plane_mapping.AirportID 
WHERE Airline='American Airlines' 

THR в соответствии с вашим предложением JOIN все столбцы таблицы plane_mapping будут доступны для вашего предложения WHERE.

Ваше исходное состояние через подзапрос было слишком сложным, и оно, вероятно, вернет более одного результата, и это недействительно.

+0

Я написал, что почти 10 минут назад;) – Shomz

+0

Да, просто обнаружил это, извините. Я печатал на своем старом iPod и не заметил, что он появляется. OP наверняка даст вам заслуженные баллы за это. ;-) – cars10m

+0

Нах, не беспокойся, я только что сказал. Давайте посмотрим, кому повезет. :) – Shomz

0

Не уверен, что я полностью понял, но похоже, что вы это слишком напуганы.

Этот запрос должен возвращать раз для данных авиакомпаний:

SELECT plane_dist.Time, plane_mapping.Airline 
FROM plane_dist 
JOIN plane_mapping 
ON plane_dist.AirportID = plane_mapping.AirportID 
WHERE Airline=('American Airlines'); 
0

Вам не нужно вложенный выбрать здесь, объединение фактически объединение столбцов двух таблиц, так что вы можете просто фильтр для авиакомпании в оговорка где:

SELECT plane_dist.Time, plane_mapping.Airline 
    FROM plane_dist JOIN plane_mapping 
on plane_dist.AirportID = plane_mapping.AirportID 
WHERE 
plane_mapping.Airline = 'American Airlines' 
+0

может уяснить проблему ?? – KAD

Смежные вопросы