是否有可能没有任何嵌套查询编写的查询为每个城市自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