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

enter image description hereTable1 - Путешественники

Столбцы - Название, Ближайший аэропорт, Пункт назначения.

Таблица2 - Рейсы

Столбцы - Код, DepartureAirport, DepTime, ArrivalAirport, ArrTime.

Проблема - найти все возможные способы перелета из ближайшего аэропорта в пункт назначения.

Мне нужно найти все возможные рейсы, включая ПРЯМЫЕ и СОЕДИНЯЮЩИЕ рейсы для Путешественников. Я могу найти прямые рейсы, но не могу найти стыковочные рейсы. (Максимум 1 остановка)

Если кто-то может помочь мне написать запрос для MS Access DB, это будет действительно полезно.

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

Fahmi 26.10.2018 06:52

Да, покажите нам некоторые данные. Вы не должны рассчитывать получить полный ответ, основанный только на том, что вы написали выше.

Tim Biegeleisen 26.10.2018 06:55

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

Suresh 26.10.2018 07:22

какова связь между table1 и table2 @SureshLalchandani

Fahmi 26.10.2018 07:40

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

Suresh 26.10.2018 18:09
0
5
265
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

 SELECT t.Name,t.NearestAirport,cn.DepartureAirport AS Stop,t.DestinationAirport
 FROM Flights f 
 JOIN Travelers t ON t.NearestAirport=f.DepartureAirport
 LEFT JOIN Flights cn ON cn.DepartureAirport=f.ArrivalAirport AND cn.ArrivalAirport = t.DestinationAirport 

Нажмите https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=2968f474760b93f25201e2cd00ccc9d6 для демонстрации В демо я рассчитал продолжительность полета

Ответ принят как подходящий

Вы можете попробовать следующее:

Хотя демо находится на sqlserver, но, поскольку это стандартный sql, я думаю, он будет работать и в MS Access

ДЕМО

  select 
       X.name,
       x.nearestairport,
       case when X.destinationaiport=X.arrivaleairport then ''
       else X.arrivaleairport end as stop1,
      X.destinationaiport 
   from
    (
       select name, a.nearestairport, a.destinationaiport,b.arrivaleairport
       from table1 a left join table2 b
       on a.nearestairport=b.departureairport
    )X
    left join table2 c 
    on X.destinationaiport=c.arrivaleairport and X.nearestairport=c.departureairport

Выход:

name    nearestairport  stop1   destinationaiport
Jason   JFK                     CLT
Jason   JFK              RDU    CLT
Robert  LAG                     RDU
Wel     CAK              JFK    CLT
Adam    RDU              CLT    JFK
Adam    RDU                     JFK

Спасибо за решение! Мне нравится логика и ее правильность, но мне пришлось внести всего одно изменение, потому что MS Access не поддерживает случай, когда я использовал оператор IIF.

Suresh 27.10.2018 04:38

Другие вопросы по теме