SQL查询问题排查:获取最短城市名的语句存在什么错误?
你的SQL查询语句存在的问题
数据库兼容性问题:
LIMIT 1是MySQL、PostgreSQL等数据库支持的语法,若在Oracle这类不支持LIMIT的数据库中执行会直接报错。这类数据库需要借助ROWNUM实现行限制,示例写法如下:SELECT CITY, LENGTH(CITY) FROM ( SELECT CITY, LENGTH(CITY) FROM STATION WHERE LENGTH(CITY) = (SELECT MIN(LENGTH(CITY)) FROM STATION) ORDER BY CITY ) WHERE ROWNUM = 1;未覆盖最长城市的需求:根据给定规则,需要处理长度最短和最长两种场景下的城市筛选,但你的语句仅实现了最短长度城市的查询,完全没涉及最长长度的逻辑。如果要同时获取两种场景下符合要求的城市,可通过
UNION ALL合并两个查询,示例如下:(SELECT CITY, LENGTH(CITY) FROM STATION WHERE LENGTH(CITY) = (SELECT MIN(LENGTH(CITY)) FROM STATION) ORDER BY CITY LIMIT 1) UNION ALL (SELECT CITY, LENGTH(CITY) FROM STATION WHERE LENGTH(CITY) = (SELECT MAX(LENGTH(CITY)) FROM STATION) ORDER BY CITY LIMIT 1);同样,若使用不支持
LIMIT的数据库,需替换为对应行限制语法。可选优化:冗余字段:如果需求仅要求返回符合条件的城市名称,
LENGTH(CITY)字段属于冗余返回,可根据实际需求决定是否保留。
内容的提问来源于stack exchange,提问作者Sharfu Shaik
相关产品推荐
相关产品推荐

