ORACLE组合条件实例
前言
在日常工作中,客户提出了某些需求,如何运用组合条件满足这些需求呢?
1.需求分析
客户需求如下:一个担保合同对应多个担保物时,只需要保留一个,手工调整太累了,能不能改成自动。
需求分析如下:
一个担保合同对应多个担保物时,条件筛选只保留一个担保金额
显而易见的,1:N的情况下造成N条数据,即多个担保物共享一个担保金额。
2.思路想法
不是重复数据的问题,采用UPDATE更新。根据需求分析确定思路如下。
1.先找出一个担保合同对应多个担保物的担保
2.确定保留哪一个(客户沟通,保留一个最早的)
3.明细实现
思路明确之后就是具体实现。
1.先找出一个担保合同对应多个担保物的担保
一个简单的分组后筛选
1 | SELECT 担保合同编号 FROM 担保合同信息表 GROUP BY 担保合同编号 HAVING COUNT(*) > 1 |
2.确定保留哪一个(客户沟通,保留一个最早的)
最早运用MIN()函数
1 | SELECT MIN(担保合同编号) |
3.组合条件UPDATE更新
1 | UPDATE 目标表 |
4.调整完善
当然要考虑到语句的运行效率优化,关于sql优化—in和exists效率问题,笔者建议另作一篇文章讨论,此处引用优化结论:
如果查询的两个表大小相当,那么用in 和exists 差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in
优化后语句如下:
1 | UPDATE 目标表 A |
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自Chaierss's Blog