如何联接两个表以查找中转航班?

时间:2018-10-26 04:51:36

标签: sql ms-access ms-access-2016

enter image description here表1-旅行者

列-名称,NearestAriport,目的地

表2-航班

列-代码,出发机场,出发时间,到达机场,到达时间

问题-查找从NearestAiport飞往目的地的所有可能方式。

我需要找到所有可能的航班,包括旅行者的直航和中转航班。我可以找到直飞航班,但遇到转机问题。 (最多1站)

如果有人可以帮助我为MS Access DB编写查询,那将真的很有帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用下面的选择获取直接/间接航班时刻表。

 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进行演示 在演示中,我已经计算了飞行时间

答案 1 :(得分:1)

您可以在下面尝试:

尽管该演示程序位于sqlserver上,但由于它是标准sql,我认为它也可以在MS Access中使用

DEMO

  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