此 SQL 查询有问题吗?
Something wrong with this SQL query?
这个查询有问题吗?
SELECT
id,
( 6371 * acos(cos(radians(?1)) * cos(radians(latitud)) * cos(radians(longitud) - radians(?2)) + sin(radians(?1)) * sin(radians(latitud)))) AS distance
FROM usuario_señales
HAVING (distance < 0.1 AND ancho <= ?3)
ORDER BY distance;
我在 spring 引导中有一个 Web 服务器,我试图根据纬度和经度获取半径为 1 米的行的 ID,并且属性 ancho 小于我的通过:
@Query(nativeQuery = true, value="SELECT id,( 6371 * acos(cos(radians(?1)) * cos(radians(latitud)) * cos(radians(longitud) - radians(?2)) + sin(radians(?1)) * sin(radians(latitud)))) AS distance FROM usuario_señales HAVING (distance < 0.1 AND ancho <= ?3) ORDER BY distance")
我得到的错误如下:
java.sql.SQLSyntaxErrorException: Unknown column 'ancho' in 'having clause'
having 子句和我的使用方式有问题。有什么线索吗?先谢谢你了。
从您的问题描述来看,您似乎不需要聚合查询。相反,您正在尝试使用 having
子句来避免在 where
子句中重复冗长的计算:MySQL 支持(即使没有 group by
子句),但在这种情况下,您只能在 having
子句中使用 select
子句中的列。
您不需要使用 having
子句来过滤 ancho
,您可以使用常规的 where
子句。我认为您要写的查询是:
SELECT
id,
( 6371 * acos(cos(radians(?1)) * cos(radians(latitud)) * cos(radians(longitud) - radians(?2)) + sin(radians(?1)) * sin(radians(latitud)))) AS distance
FROM usuario_señales
WHERE ancho <= ?3
HAVING distance < 0.1
ORDER BY distance;
我不喜欢这种语法,它依赖于 MySQL 对标准 SQL 的扩展。我会改用子查询:
SELECT *
FROM (
SELECT
id,
( 6371 * acos(cos(radians(?1)) * cos(radians(latitud)) * cos(radians(longitud) - radians(?2)) + sin(radians(?1)) * sin(radians(latitud)))) AS distance
FROM usuario_señales
WHERE ancho <= ?3
) t
WHERE distance < 0.1
ORDER BY distance;
这个查询有问题吗?
SELECT
id,
( 6371 * acos(cos(radians(?1)) * cos(radians(latitud)) * cos(radians(longitud) - radians(?2)) + sin(radians(?1)) * sin(radians(latitud)))) AS distance
FROM usuario_señales
HAVING (distance < 0.1 AND ancho <= ?3)
ORDER BY distance;
我在 spring 引导中有一个 Web 服务器,我试图根据纬度和经度获取半径为 1 米的行的 ID,并且属性 ancho 小于我的通过:
@Query(nativeQuery = true, value="SELECT id,( 6371 * acos(cos(radians(?1)) * cos(radians(latitud)) * cos(radians(longitud) - radians(?2)) + sin(radians(?1)) * sin(radians(latitud)))) AS distance FROM usuario_señales HAVING (distance < 0.1 AND ancho <= ?3) ORDER BY distance")
我得到的错误如下:
java.sql.SQLSyntaxErrorException: Unknown column 'ancho' in 'having clause'
having 子句和我的使用方式有问题。有什么线索吗?先谢谢你了。
从您的问题描述来看,您似乎不需要聚合查询。相反,您正在尝试使用 having
子句来避免在 where
子句中重复冗长的计算:MySQL 支持(即使没有 group by
子句),但在这种情况下,您只能在 having
子句中使用 select
子句中的列。
您不需要使用 having
子句来过滤 ancho
,您可以使用常规的 where
子句。我认为您要写的查询是:
SELECT
id,
( 6371 * acos(cos(radians(?1)) * cos(radians(latitud)) * cos(radians(longitud) - radians(?2)) + sin(radians(?1)) * sin(radians(latitud)))) AS distance
FROM usuario_señales
WHERE ancho <= ?3
HAVING distance < 0.1
ORDER BY distance;
我不喜欢这种语法,它依赖于 MySQL 对标准 SQL 的扩展。我会改用子查询:
SELECT *
FROM (
SELECT
id,
( 6371 * acos(cos(radians(?1)) * cos(radians(latitud)) * cos(radians(longitud) - radians(?2)) + sin(radians(?1)) * sin(radians(latitud)))) AS distance
FROM usuario_señales
WHERE ancho <= ?3
) t
WHERE distance < 0.1
ORDER BY distance;