SQL报错‘Operation Not Supported on Non-User Columns’的解决咨询
问题修复方案
问题原因
你遇到的错误是因为数据库仍将别名p识别为底层的系统列rowid,而你的SQL引擎不支持对非用户创建的系统列执行count(distinct)这类聚合操作——即便你在子查询里给它重命名,引擎依然能识别其系统列属性。
修复方法
方法1:直接简化查询(优先推荐)
如果业务逻辑不需要子查询,直接在外层使用rowid即可绕开别名问题:
select count(*), count(distinct rowid) from elephants
方法2:将系统列转为普通用户列(适用于必须保留子查询的场景)
通过对rowid执行无意义的计算操作,让数据库将其视为普通用户列(操作不会改变值,仅改变列的属性):
select count(*), count(distinct p) from (select *, rowid + 0 as p from elephants)zzz
或者用字符串拼接的方式:
select count(*), count(distinct p) from (select *, rowid || '' as p from elephants)zzz
方法3:嵌套子查询隔离系统列
通过两层子查询,让外层查询无法识别p的系统列属性:
select count(*), count(distinct p) from (select * from (select *, rowid as p from elephants))zzz
内容的提问来源于stack exchange,提问作者Uk rain troll
相关产品推荐
相关产品推荐

