我有一个包含列的表:city,x,y
我需要选择所有城市之间的距离而不重复 结果应该是这样的 city1,城2,距离
但 我不应该得到city2,city1,distance(因为我已经有了这些城市之间的距离...
对于那个正确的SQL查询是什么... 谢谢!
答案 0 :(得分:4)
SELECT c1.City, c2.City, dbo.CalcDistance(c1.x, c1.y, c2.x, c2.y)
FROM Cities c1, Cities c2
WHERE c1.CityID > c2.CityID
答案 1 :(得分:2)
SELECT
C1.city,
C2.city,
<distance calculation>
FROM
Cities C1
INNER JOIN Cities C2 ON
C2.city_id > C1.city_id
我把距离计算留空了,因为它取决于你是否“像乌鸦一样”,使用街道路线,考虑到地球的曲率等等。
答案 2 :(得分:1)
你要做的事情被称为“跑步总数”。
小心使用像ON c1.CityID > c2.CityID
这样的三角形连接,它们会创建一个笛卡尔积! (我不想与别人的答案争论。)
查看Jeff Moden关于运行总计的世界上最好的文章: Solving the "Running Total" & "Ordinal Rank" Problems (Rewritten)
如果您没有帐户,则必须创建一个帐户(只需要一个电子邮件地址)。但是,我保证这是值得的!