Sql 错误消息:ORA-00923:FROM关键字未在预期位置找到
因此,我目前正在处理一个oracle查询,我想获取最大视距及其相应的视距id值,但是我一直遇到ORA-00923:FROM关键字not found where expected error。有没有办法修复这个错误Sql 错误消息:ORA-00923:FROM关键字未在预期位置找到,sql,oracle,Sql,Oracle,因此,我目前正在处理一个oracle查询,我想获取最大视距及其相应的视距id值,但是我一直遇到ORA-00923:FROM关键字not found where expected error。有没有办法修复这个错误 SELECT TOP 1 SIGHTING_ID, sqrt(((-28 - LATITUDE)*(-28 - LATITUDE)) + ((151 - LONGITUDE)*(151 - LONGITUDE))) AS "SIGHTING_DISTANCE" FROM( S
SELECT TOP 1 SIGHTING_ID, sqrt(((-28 - LATITUDE)*(-28 - LATITUDE)) + ((151 - LONGITUDE)*(151 - LONGITUDE))) AS "SIGHTING_DISTANCE"
FROM(
SELECT SIGHTING_ID, longitude, latitude
FROM SIGHTINGS)
GROUP BY SIGHTING_DISTANCE
ORDER BY ASC;
SELECTTOP 1在Oracle SQL中不存在。选择子查询中的所有内容,对子查询排序,然后再次选择所有内容“where ROWMUM=1”。(还有很多其他方法可以做到这一点——如果你有Oracle 12,那么有一个与“TOP 1”非常相似的新功能)我认为Oracle没有
TOP
关键字。相反,请尝试使用ROWNUM
:
SELECT *
FROM
(
SELECT SIGHTING_ID,
SQRT(((-28 - LATITUDE)*(-28 - LATITUDE)) + ((151 - LONGITUDE)*(151 - LONGITUDE))) AS "SIGHTING_DISTANCE"
FROM SIGHTINGS
ORDER BY "SIGHTING_DISTANCE" DESC
)
WHERE ROWNUM = 1
我还修复了您的查询中的一些其他问题。您不需要使用
groupby
获取最大距离,而且在任何情况下,您都是在选择非聚合列的瞄准ID。另外,您不需要原始子查询。使用其中ROWNUM=1
而不是TOP
TOP不是Oracle。。。还有由ASC订购的?谢谢!!这解决了错误,但实现上面的方法给了我一个无效的视距标识符,还有什么其他提示导致了这个错误?因为你选择的是视距ID,但是你的组有视距。