拆分用逗号分隔的字段

菜鸟一枚,简单记录一下工作中遇到的问题,不断总结,不断成长。

============================================================

之前开发一张报表,验证过没问题的(刚开始数据量很少,问题没有暴露出来),今天同事反应说存在重复数据!!!

完全想不通哪里出了问题,刚开始怀疑研发那边的同事给的关联关系错了,验证了一下震精了,真的有问题!!!

然鹅,重复数据并不是因为这个问题产生的。。。

接下来就要验证数据了:

建临时表重跑数据验证,查看数据,果然单表查询也是有问题的,问题定位到了。

查看old代码:

 select f_id,
         a.f_seat_no,
         regexp_substr(f_seat_no, '[^,]+', 1, level) as seat_code
    from tickods.t_sell_order a
   where a.f_order_state in (4, 7, 8, 9)
  connect by level <= regexp_count(f_seat_no, ',') + 1
         and f_seat_no= prior f_seat_no
         and prior dbms_random.value > 0;

查看new代码:

 select f_id,
         a.f_seat_no,
         regexp_substr(f_seat_no, '[^,]+', 1, level) as seat_code
    from tickods.t_sell_order a
   where a.f_order_state in (4, 7, 8, 9)
  connect by level <= regexp_count(f_seat_no, ',') + 1
         and f_id= prior f_id
         and prior dbms_random.value > 0;

经过把f_seat_no 改为f_id之后, 问题解决

oldsql: f_seat_no = prior f_seat_no ,应该是这里出了问题,因为影院的某个座位好多订单都可以买嘛,不同场次的不同订单都买某个座位,所以遍历数据的时候不同订单的座位号也会对应上(有点像笛卡尔),导致数据重复,所以

newsql:f_id = prior f_id 改为id,因为id唯一,不同的订单对应的座位号属于不同的场次,有了这个约束就可以避免对应错乱而产生数据的重复。

思考:出现问题的主要原因还是对树形递归查询不太熟悉,针对不会的技术点一定要深挖,知道运行原理,第一篇记录,只是自己学习的一点点小小积累吧,继续努力!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值