是否有可能沒有任何嵌套查詢編寫的查詢爲每個城市自COLUMN1找到最接近從列2和顯示City1,位於City2和距離一個查詢來計算距離,而不嵌套查詢
Table:
City1, City2, Distance
例如
City1, city2, Distance
A B 10
A C 20
A D 30
E F 40
E G 10
re result should be:
A B 10
E G 40
感謝所有幫助
是否有可能沒有任何嵌套查詢編寫的查詢爲每個城市自COLUMN1找到最接近從列2和顯示City1,位於City2和距離一個查詢來計算距離,而不嵌套查詢
Table:
City1, City2, Distance
例如
City1, city2, Distance
A B 10
A C 20
A D 30
E F 40
E G 10
re result should be:
A B 10
E G 40
感謝所有幫助
這是對greatest-n-per-group
查詢的變化。這種類型的查詢在堆棧溢出時經常出現。
SELECT c1.City1, c1.City2, c1.Distance
FROM Cities AS c1
LEFT OUTER JOIN Cities AS c2
ON c1.City1 = c2.City1 AND c1.Distance > c2.Distance
WHERE c2.City1 IS NULL;
換句話說,找到c1
行城市對以使得沒有其他城市對c2
具有相同City1和更緊密的城2存在。
雖然你的答案並不嚴格地涉及嵌套查詢,但我必須說我發現嵌套查詢的版本在NOT EXISTS * * *中更清晰。 – gpeche
如果您有機會獲得ROW_NUMBER()和通用表表達式(如Oracle10g中和SQL Server 2005等)...
WITH
ordered_results AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY City1 ORDER BY Distance, City2) AS rank,
City1,
City2,
Distance
FROM
Cities
)
SELECT
City1,
City2,
Distance
FROM
ordered_results
WHERE
rank = 1
根據你所說的「嵌套查詢」什麼,這可能會或可能不會被您接受。
但是在任何合理大小的數據集中,我一直保證能找到這個最具有普遍效用的解決方案。
這是不是最好的,但將
SELECT LEAST(city1,位於City2)city1, GREATEST(city1,位於City2)城2, 距離 從遠處 GROUP BY LEAST(city1,位於City2),GREATEST (city1,city2),距離
您的最後結果記錄不應該是「EG 10」嗎? –
請你能告訴你爲什麼你需要避免嵌套查詢?根據所需邏輯的不同,嵌套查詢可以是最簡潔最快速的解決方案。 (通過任何方式嵌套查詢並不是普遍的錯誤觀點。)另外,您使用的SQL版本是什麼? – MatBailie