11 ORA系列:ORA-01791: 不是 SELECTed 表达式(distinct使用注意点)
not a Selected expression:不是一个查询表达式;
原始报错sql:
select
distinctreport.fid as "reportId",-- assign.fassigntype as "type",report.fsalestatus as "saleStatus",report.ftransactionstatus as "transactionStatus",report.fsettleaccountstatus as "settleAccountStatus",report.ftenementdetail as "tenementDetail",person.fid as "personId",person.fname as "personName",-- 上数业绩,分成比例(select sum(assign.fprice) || '| ' || sum(assign.fproportion)from t_trade_commissionassign assignwhere report.fid = assign.fktransactionreportidand assign.fkpersonid = person.fid) as "ppsum",to_char(report.ftransactiondate,'yyyy-MM-dd') as "transactionDate"from t_hr_person personleft join t_trade_commissionassign assign on person.fid=assign.fkpersonidleft join t_trade_transactionreport report on assign.fktransactionreportid=report.fidwhere 1=1 and person.fid = '90481a8d-0c05-4002-9532-26e0482a96af' and to_char(report.ftransactiondate,'yyyy-MM-dd') >= '2017-10-24'order by report.ftransactiondate desc;
通常ORA-01791--的错误,都是在使用distinct后出现的。
通常是因为distinct和order by 一起使用,因为字段名称冲突报错。
上面的SQL报错是因为order by后使用的字段名称,使用的是原始名称,不是使用别名“transactionDate”所导致的。
也就是说,如果有distinct时,order by后面跟的字段名称,必须是最新的别名(若没有别名,就使用原来的名称,若有多层子查询,则使用最新的那个别名);
上面错误修改:
order by report.ftransactiondate desc;
改为
order by "transactionDate" desc;
这样就可以执行成功了。
distinct使用注意点:
1.必须放在查询字段最前面 (若不出最前面,会报错:表达式缺失)
2.distinct后面有多个查询字段时,当这多个字段完全不同时,才算是重复记录,予以剔除
如果查询多个字段,只想给第一个字段去重,那么这样做事不可以的
3.distinct与order by连用时,order by后面的排序字段名,必须是最新的字段名称或别名。
Oracle 9i数据库,执行下面语句出现错误“ORA-01791: 不是 SELECTed 表达式”:select distinct t.name from auth_employee t order by t.auth_employee_id asc
原来:SELECT语句中含有DISTINCT关键字或者有运算符时,排序用字段必须与SELECT语句中的字段相对应。
网上搜到解释如下:在ORDER BY中指定多个列,结果将先按照子句中的第一列排序,然后第二个,依此类推。
在SELECT中未出现的列名也可用于ORDER BY 子句中,只要TABLE中有就行。但如果SELECT子句中出现了DISTINCT关键字,则只能用出现过的列名,而且如果SELECT子句中使用了任何运算符,在ORDER BY 子句中必须保持和SELECT子句中表达式完全一致,否则出现错误:“ORA-01791: 不是 SELECTed 表达式”。
11 ORA系列:ORA-01791: 不是 SELECTed 表达式(distinct使用注意点)相关推荐
- 苹果11:系列评测,万元巨款哑铃表现如何?
今年的 iPhone 终于回归了正常的命名,前两年的 "X" 苹果一直都不是读做"X"而是读作"ten",所以前两代 iPhone 也可以说 ...
- oracle redact数据编译后 查询报错 不是selected表达式
环境:oracle 11.2.0.4 问题:select distint 语句查询redact(加密)后的表报错不是selected表达式,而在加密之前执行同样的sql不报错,解决方案在文章最后面 实 ...
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)
2019独角兽企业重金招聘Python工程师标准>>> C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) 首先,让我们来看看以&方式进行变量捕获,同样没有参 ...
- ORA-01791: 不是 SELECTed 表达式
Oracle 9i数据库,执行下面语句出现错误"ORA-01791: 不是 SELECTed 表达式":select distinct t.name from auth_emplo ...
- C#表达式目录树系列之5 –动态创建查询表达式
概要 在项目开发中,根据用户的需求,一般来是,我们的查询表达式是固定的,新的查询需求都要通过代码的修改来实现.而对于不确定的查询条件,固定查询表达式的方式显然是行不通的. 针对固定查询表达式存在的问题 ...
- oracle 不是selected表达式,查询语句报不是 SELECTed 表达式错误
Oracle 9i数据库,执行下面语句出现错误"ORA-01791: 不是 SELECTed 表达式":select distinct t.name from auth_emplo ...
- 10 ORA系列:ORA-12704 字符集不匹配 character set mismatch
如果希望对常见的Oracle异常ORA报错解决方案有系统的了解,请看<ORACLE系列异常总结ORA>. 关于Union 中 ORA-12704:字符集不匹配 character set ...
- 09 ORA系列:ORA-06553 PLS-306
如果希望对常见的Oracle异常ORA报错解决方案有系统的了解,请看<ORACLE系列异常总结ORA>. ORA-06553: PLS-306: wrong number or types ...
- 08 ORA系列:ORA-01861 文字与格式字符串不匹配
如果希望对常见的Oracle异常ORA报错解决方案有系统的了解,请看<ORACLE系列异常总结ORA>. 现象:Oracle 插入时间时 ,报错:ORA-01861: 文字与格式字符串不匹 ...
最新文章
- 征途linux mysql_MySql征途之mysql常用命令
- [专栏]壹周技术秀(第一期)
- java 静态初始化 调用_java JVM-类加载静态初始化块调用顺序
- 有图有真相!同是滑屏,荣耀Magic2不只比小米MIX3缝隙小,还更稳定
- 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
- vue-video-player修改src就会报错_4、修改入口点代码
- USACO-Section2.1 Healthy Holsteins (深度优先搜索)
- prototype 1.3.1 跟 ajax冲突!!!莫名其妙!
- 博客园项目开发中的难点
- 11 EDA技术实用教程【时序电路的Verilog设计2】
- 计算机主机跳线连接图片,台式电脑主机五根跳线怎么接?红白 蓝白 绿 白 橙白...
- 75.【JavaWeb-03】
- 计算机歌曲夜空中最亮的星,抖音夜空中最亮的星电视剧插曲歌曲介绍
- WebStrom中一些有趣的工具与常用快捷键
- 电池充电IC市场现状研究分析与发展前景预测报告
- 关于研究鼠标绘制平滑曲线的阶段总结
- html怎么多行超出省略号,css+js 如何实现多行文字超出显示省略号(需要同时兼容ie chrome等浏览器)...
- SpringBoot WEB怎么实现大文件上传
- SQL注入攻击的实现和防止
- javaScript-如何引入js代码
热门文章
- 智能合约重构社会契约(12)天秤币
- (chap1 网络基础知识)通信类型
- 差分能量分析介绍(一)
- 第十三届“华中杯”大学生数学建模挑战赛题目 B 题 技术问答社区重复问题识别
- 设计模式--备忘录(Memento)模式
- 【python】算法引入及算法特性和时间复杂度
- 思想解读:optee中的多线程处理
- MTK的LK代码异常向量表解析
- [答疑]-中断流程举例:在TEE侧时产生了FIQ,回到REE后为啥又产生了IRQ
- [ARM-assembly]-汇编示例:c语言翻译成汇编