SQL查询ORDER BY中使用CASE WHEN关联子查询报错问题咨询
报错原因
这个错误是DB2数据库的SQL解析限制导致的,你的SQL语法本身符合标准SQL规范,没有书写错误:
- DB2解析ORDER BY子句时,不会将外层FROM子句的表作用域传递到ORDER BY内部嵌套的相关子查询中,因此EXISTS子查询里的
dog.dogid无法识别到外层dog表的字段,直接抛出SQLCODE=-206字段不存在错误 - 后续的
SQLCODE=-727是连锁报错,是数据库尝试做隐式处理失败触发的,根源还是前者的字段识别问题
符合要求的替代方案
以下方案可以直接把排序逻辑保留在ORDER BY子句中,不需要在SELECT里提前计算排序标记:
SELECT DISTINCT d.* FROM dog d LEFT JOIN dogfood df ON d.dogid = df.dogid ORDER BY CASE WHEN df.dogid IS NOT NULL THEN 1 ELSE 0 END;
如果需要有匹配的dog记录排在前面,在ORDER BY末尾加DESC即可。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

