Sql:Haversine 公式错误列不存在

Posted

技术标签:

【中文标题】Sql:Haversine 公式错误列不存在【英文标题】:Sql: Haversine formula error column doesn't exist 【发布时间】:2012-09-14 14:01:03 【问题描述】:

我遇到了一个与我的半正弦公式有关的奇怪问题。它在我的应用程序中发生的方式是;

select lat,long,distance from(
        select lat,long,( 6371 * acos( cos( radians("+testLatitude.to_s+") ) * cos( radians( lat ) ) * cos( radians( long ) - radians("+testLongitude.to_s+") ) + sin( radians("+testLatitude.to_s+") ) * sin( radians( lat ) ) ) ) as distance
        from available_people) as dt where distance < "+distance.to_s+" order by distance

我 100% 确定我的 available_people 表中有一个 personName,但我无法让下面的查询正常工作。它给了我列不存在错误。

select lat,long,distance from(
            select personName,lat,long,( 6371 * acos( cos( radians("+testLatitude.to_s+") ) * 

    cos( radians( lat ) ) * cos( radians( long ) - radians("+testLongitude.to_s+") ) + sin( radians("+testLatitude.to_s+") ) * sin( radians( lat ) ) ) ) as distance
                from available_people) as dt where distance < "+distance.to_s+" order by distance

可能的原因是什么。我可以检索 personName 列以及 lat、long 信息吗?

【问题讨论】:

【参考方案1】:

没有看到确切的错误(你真的应该包括它)我会说你应该在表格前面加上personName,即available_people.personNamedt.personName(如果我正确地阅读了你的查询)。

第二,尽管无关,您在 lat/lng 列中使用什么列类型?这是使用mysql吗?作为浮动?

如果是这种情况,那么一旦您的表拥有足够的记录,您就会遇到严重的性能问题。我遇到了大约 5 万条记录的问题,其中查询需要 2 分钟或更长时间。

如果您正在处理地理空间数据,请考虑使用 Postgres+PostGIS 或 MongoDB。这些解决方案具有地理空间索引功能,可让您的查询超快且功能强大,因此您不必自己执行余弦或球面余弦定律。

【讨论】:

以上是关于Sql:Haversine 公式错误列不存在的主要内容,如果未能解决你的问题,请参考以下文章

列不存在服务器错误 - 但 sql 服务器管理说它存在

错误:“行/列不存在数据”使用 OdbcDataReader

如果列不存在,则无法添加?

Postgres 列不存在

Haversine 公式单元错误 - PL/SQL

PGError:错误:关系列不存在