是否有理由在SQL中使用别名返回错误?

时间:2018-01-23 21:02:28

标签: java mysql spring-mvc

我正在尝试在Spring MVC Repository类中运行以下代码,以找到最近的Garda站(警察局)到客户端用户输入的纬度和经度值。在下面的代码中,| grep --color=auto \bRedundancy\w*\b(?<!Full)\|\bHealth\w*\b(?<!Ok):latitude表示用户输入,:longitudeg.gardaStation_longitude表示存储在数据库中的工作站的lat long值。

g.gardaStation_latitude

但是,在查询中使用'g'会导致错误。我之前在很多查询中都包含了别名,并且没有看到过这样的错误?

static final String HAVERSINE_PART = "(6371 * acos(cos(radians(:latitude)) * cos(radians(g.gardaStation_latitude)) * cos(radians(g.gardaStation_longitude) - radians(:longitude)) + sin(radians(:latitude)) * sin(radians(g.gardaStation_latitude))))";

    @Query(value = "SELECT g FROM garda_station g ORDER BY "+HAVERSINE_PART+" DESC LIMIT 1", nativeQuery = true)
    public GardaStation findByGardaStation_LatitudeAndGardaStation_Longitude(@Param("latitude") final double latitude, @Param("longitude") final double longitude);

错误的完整记录

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'g' in 'field list'

2 个答案:

答案 0 :(得分:1)

SELECT g FROM garda_station g不是 native SQL的正确语法,而对JPQL/HQL来说是正确的。您只给出了一个表别名,您应该列出列,因此它可以是g.*或单个列名。在这种情况下g.*,因为您将结果映射到实体。

答案 1 :(得分:0)

在SELECT子句中,您需要列出要包含在结果中的字段。这些将是您希望包含在结果中的garda_station表中的列。如果你想看到所有的字段,你可以&#34; SELECT * FROM garda_station&#34;。 由于您将garda_station表别名为g,因此您可以在列中添加&#34; g。&#34;,例如&#34; SELECT g。* FROM garda_station&#34;。 由于g不是列的名称,因此&#34; SELECT g&#34;会导致错误。