我有兩張桌子:
AirPorts (IATA_CODE TEXT, LATITUDE REAL, LONGITUDE REAL)
AirRoutes (ROUTE_FROM TEXT, ROUTE_TO TEXT)
AirRoutes 表包括來自 Airports 且未在 Airports 表中列出的路線。它還包括同一路線的多次出現。
首先,我希望選擇在“AirPorts”表中存在的機場開始和結束的所有唯一路線。我不知道這是否是最好的方法,但它似乎有效:
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);
接下來,我想過濾掉回傳AB路由的BA路由,所以如果有AMS到DUB的路由,我也不想將DUB回傳到AMS。
你會怎么做?
最后,我不知道這是否可能,我想獲得包括在內的職位,所以每一行都是這樣的:
ROUTE_FROM=AMS, LAT_FROM=52.3, LON_FROM=4.76, ROUTE_TO=DUB, LAT_TO=53.42, LON_TO=-6.24
你會怎么做?也許這對于一個查詢來說太冒險了,我應該把它分成三個部分?
uj5u.com熱心網友回復:
使用 CTE 獲取所有不同的ROUTE_FROMandROUTE_TO對,AirRoutes并將其連接到 2 個副本,AirPorts如下所示:
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485330.html
