fetch与union联用SQL报SQL command not properly ended错误
触发
SQL command not properly ended报错的核心原因 - 你当前使用的写法违反了
UNION合并查询的语法规则:UNION连接的是独立的结果集,单个查询分支如果要单独做排序、行限制(FETCH FIRST),必须将该分支包裹为独立的子查询(内联视图),否则数据库会将第一个分支末尾的fetch first 1 rows only识别为整个SQL语句的结束位置,后续紧跟的union关键字没有匹配的前置语法结构,就会抛出语句未正确结束的错误。 - 额外需要注意:不套子查询的前提下,
ORDER BY子句只能写在整个UNION语句的最末尾,作用是对两个分支合并后的全量结果排序,无法实现你预期的「两个分支分别按不同规则排序取数后再合并」的逻辑。
修正后可正常执行的SQL
SELECT * FROM ( SELECT column1, length(column1) FROM test10 ORDER BY length(column1), column1 ASC FETCH FIRST 1 ROWS ONLY ) UNION SELECT * FROM ( SELECT column1, length(column1) FROM test10 ORDER BY length(column1) DESC, column1 ASC FETCH FIRST 1 ROWS ONLY );
修正逻辑说明:将两个需要独立排序取首行的查询分别包裹为独立子查询,让每个子查询内部的排序、行限制逻辑只作用于自身查询结果,外层再通过
UNION合并两个子查询返回的结果,既符合语法要求,也能匹配你预期的取数逻辑。
内容的提问来源于stack exchange,提问作者deku
相关产品推荐
相关产品推荐

