去重时遇到invalid number错误——表自连接时是先从外面过滤,还是先执行where条件
来源:互联网 发布:app软件怎么开发 编辑:程序博客网 时间:2024/06/08 00:46
表A里面有电话和宽带产品信息,对于同一个地址存在多个电话或多个宽带的可能(已经处理了同一地址既存在电话又存在宽带情况),现在要处理多个电话情况,只保留电话号码最小那个。由于电话的接入号就是电话号码本身,宽带的接入号则是以ADSL开头的字符串,所以采取下面的方法删除多个电话的:
delete from A ss
where ss.prod_id = 1 --电话产品
and to_number(ss.acc_nbr) > (select min(to_number(ss2.acc_nbr))
from A ss2
where ss2.stid=ss.stid);
原以为可以顺利删掉的,但却遇到了ORA-01722:invalid number的错误。
仔细考虑后认为是以下原因:
刚开始以为在外面限制prod_id=1后,后面括号里ss的stid就只会是有电话的地址,但实际情况却是取ss的所有stid,执行完where条件后再去外面过滤,所以会遇到宽带的接入号而无法转换为number类型。解决的办法是where条件后括号里也给ss2加上prod_id的限制。
- 去重时遇到invalid number错误——表自连接时是先从外面过滤,还是先执行where条件
- join连接表时是先join还是先where
- SQLServer inner join 不先执行where条件的优化
- 数据where条件过滤
- ocp-047-87 where 条件限制的自连接
- Oracle WHERE条件执行顺序
- Oracle WHERE条件执行顺序
- Oracle select ---------having条件过滤与where条件过滤
- oracle-having条件过滤与where条件过滤
- Oracle select ---------having条件过滤与where条件过滤
- 网络编程(二):先判断错误还是先接受连接?
- hibernate使用@where实现条件过滤功能
- 左外连接 where条件 on条件
- Mysql基础——where 过滤数据
- MySQL左外连接where条件包含多表写法
- Oracle数据库中的Where条件执行顺序是从后往前的?
- Python——条件过滤
- Oracle数据库Where条件执行顺序
- C++多态性
- 第十三堂课后作业
- Qt Creator打开 非IDE环境 下的QT项目 CMakeLists.txt
- JAVA实现对某一时间(hh:mm)增加若干分钟
- SQL - SELECT COUNT用法
- 去重时遇到invalid number错误——表自连接时是先从外面过滤,还是先执行where条件
- linux rsync
- 如何用googletest写单元测试
- 关于补码原理的证明
- HTTP1.0与1.1区别
- Direct2D教程(五)复合图形
- C/C++时间函数使用方法
- office 自动编号系列碰到问题小解
- #地图故事#教程1:如何制作标准地图