【发布时间】:2020-08-26 17:37:41
【问题描述】:
这个查询有问题吗?
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 Boot 中有一个 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:“有子句”中的未知列“ancho”
have 子句和我如何使用它有问题。有什么线索吗?提前谢谢你。
【问题讨论】:
-
HAVING 表达式可以引用 GROUP BY 中使用的源表列/表达式(此子句在您的查询中不存在)或输出列名/别名(
ancho列名/别名在输出列列表)或源表列/表达式未在 GROUP BY 中使用但用聚合函数包装。所以查询是错误的。 -
所以我需要在 HAVING 子句之后放置 GROUP BY ancho 吗?因为它不起作用。现在是 SQL 语法错误。
-
ancho是usuario_señales中的列吗?如果是这样,则将此列的条件移至 WHERE 子句。 -
@Akina 谢谢!现在已经解决了。
标签: mysql sql spring where-clause having-clause