我正在尝试在 SQLite 3 中运行以下查询:
SELECT *,
DISTANCE(latitude, longitude, ?, ?) AS "distance"
FROM "country"
WHERE "id" NOT LIKE ?
HAVING "distance" <= ?
ORDER BY "distance" ASC;
但我收到以下错误:
SQLSTATE[HY000]: General error: 1 a GROUP BY clause is required before HAVING
我不明白为什么 SQLite 要我对结果进行分组,但我仍然尝试了以下操作:
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;
没有错误,但所有记录均已返回(即使是那些具有 "distance" > ?
的记录)。我也尝试过这样做:
SELECT *,
DISTANCE(latitude, longitude, ?, ?) AS "distance"
FROM "country"
WHERE "id" NOT LIKE ?
AND "distance" <= ?
ORDER BY "distance" ASC;
相同的输出,返回所有记录。我已经仔细检查过 - 距离计算正确...我不知道这个查询出了什么问题,有人可以帮助我吗?
最佳答案
如果未指定 GROUP BY
子句,则无法指定 HAVING
子句。使用:
SELECT *,
DISTANCE(latitude, longitude, ?, ?) AS dist
FROM COUNTRY c
WHERE c.id NOT LIKE ?
AND DISTANCE(c.latitude, c.longitude, ?, ?) <= ?
ORDER BY dist;
如果您不想多次调用 DISTANCE,可以使用子查询:
SELECT x.*
FROM (SELECT c.*,
DISTANCE(latitude, longitude, ?, ?) AS dist
FROM COUNTRY c
WHERE c.id NOT LIKE ?) x
WHERE x.dist <= ?
ORDER BY dist;
关于sql - SQLite SQL 查询的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2099090/