我正在尝试在SQLite 3中运行以下查询:
SELECT *,
DISTANCE(latitude, longitude, ?, ?) AS "distance"
FROM "country"
WHERE "id" NOT LIKE ?
HAVING "distance" <= ?
ORDER BY "distance" ASC;
但我遇到了以下错误:
我不理解为什么SQLite要求我对结果进行分组,但我尝试了以下操作:SQLSTATE[HY000]:一般性错误:在HAVING之前需要一个GROUP BY子句
SELECT *,
DISTANCE(latitude, longitude, ?, ?) AS "distance"
FROM "country"
WHERE "id" NOT LIKE ?
GROUP BY "id"
HAVING "distance" <= ?
ORDER BY "distance" ASC;
我也尝试了这个:
SELECT *,
DISTANCE(latitude, longitude, ?, ?) AS "distance"
FROM "country"
WHERE "id" NOT LIKE ?
GROUP BY "distance"
HAVING "distance" <= ?
ORDER BY "distance" ASC;
没有错误,但是所有的记录都被返回了(即使它们具有“距离”>?)。我还尝试了以下操作:
SELECT *,
DISTANCE(latitude, longitude, ?, ?) AS "distance"
FROM "country"
WHERE "id" NOT LIKE ?
AND "distance" <= ?
ORDER BY "distance" ASC;
输出结果相同,所有记录都被返回。我已经仔细检查过了——距离计算是正确的……我不知道这个查询有什么问题,请有经验的人帮帮我吧。
GROUP BY
子句...有没有办法在不调用两次DISTANCE
函数的情况下运行查询?这将使查询运行速度大大提高。 - Alix Axel