使用 SQLite 查找独特的航线

Finding Unique Airline Routes with SQLite

我有两个 table:

AirPorts (IATA_CODE TEXT, LATITUDE REAL, LONGITUDE REAL)
AirRoutes (ROUTE_FROM TEXT, ROUTE_TO TEXT)

AirRoutes table 包括未在机场 table 中列出的机场的航线。它还包括同一路线的多次出现。

首先,我希望 select 所有在 'AirPorts' table 中存在的机场开始和结束的唯一路线。我不知道这是否是最好的方法,但它似乎有效:

SELECT DISTINCT AirRoutes.ROUTE_FROM, AirRoutes.ROUTE_TO FROM AirRoutes
WHERE EXISTS 
   (SELECT IATA_CODE
    FROM AirPorts_SM
    WHERE AirRoutes.ROUTE_FROM = IATA_CODE)
AND EXISTS
   (SELECT IATA_CODE
    FROM AirPorts_SM
    WHERE AirRoutes.ROUTE_TO = IATA_CODE);

接下来,我想过滤掉A-B路由returned的B-A路由,所以如果有AMS到DUB的路由,我不想return DUB到AMS还有。

你会怎么做?

最后,我不知道这是否可行,我想得到包含的位置,所以每一行都会像:

ROUTE_FROM=AMS, LAT_FROM=52.3, LON_FROM=4.76, ROUTE_TO=DUB, LAT_TO=53.42, LON_TO=-6.24

你会怎么做?也许这对于一个查询来说太冒险了,我应该把它分成三个部分吗?

使用 CTE 获取 AirRoutesROUTE_FROMROUTE_TO 的所有不同对,并将其连接到 AirPorts 的 2 个副本,如下所示:

WITH cte AS (
  SELECT DISTINCT 
         MIN(ROUTE_FROM, ROUTE_TO) ROUTE_FROM,
         MAX(ROUTE_FROM, ROUTE_TO) ROUTE_TO
  FROM AirRoutes
)  
SELECT c.ROUTE_FROM, f.LATITUDE LAT_FROM, f.LONGITUDE LON_FROM,
       c.ROUTE_TO, t.LATITUDE LAT_TO, t.LONGITUDE LON_TO
FROM cte c
INNER JOIN AirPorts f ON f.IATA_CODE = c.ROUTE_FROM
INNER JOIN AirPorts t ON t.IATA_CODE = c.ROUTE_TO;