您的位置:首页 > 其它

清结算内部勾兑业务一个比较有意思的问题整理

2016-12-13 17:50 218 查看
有段时间没有在博客上发表过内容了,都写在了文档上了,有时间全都整理发表出来,可以让应聘Java高工的同学看下。

今天遇到一个比较有意思的事情给大家说下,有关清结算内部勾兑的事情,你看完之后估计就会学到很多东西,从业务上,技术上和设计方案上都会学到一些,到时候面试官问的时候完全可以拿出来回答面试官的问题(比如问:讲一个你参与设计过的事情?)

技术点:

(1)WMSYS.WM_CONCAT(‘’||'')

            表: user

                  id name  transno

                  1   张三    20

                  2   李四    20

                  3 王五   21

            sql:select t.transno,WMSYS.WM_CONCAT(t.name||',') as data from user t where t.transno = '20';

            结果:

                  transno  data

                  20     张三,李四

             注意 如果这样写sql:select t.transno,t.name|| as data from user t where t.transno = '20';

            结果:

                  transno  name

                  20     张三

                  20     李四

              如果 接下来有一张表stu
                  是拿着上面sql产生的数据插入到stu表中 transno作为主键 那么用第一条sql就会报错 因为第一次主键是20 第一次再插入一个主键为20就违反了主键约束

                  (我这边的业务场景是内部勾兑差错表 的主键是平台流水号 即一个平台流水号对应一条内部勾兑差错记录)

(2)

                t1                        t2

           COL1 COL2     COL2 COL3

              1 A          A A2

              2 B          B B2

              3 C          D D2

 

             select t1.col1,t1.col2,t2.col3 from t1,t2 where t1.col2=t2.col2;
内连接  同inner join on

                   1 A A2

                   2 B B2

 

             select t1.col1,t1.col2,t2.col3 from t1 left outer join t2 on (t1.col2=t2.col2);左外连接

                1 A A2

                2 B B2

                3 C

             select t1.col1,t1.col2,t2.col3 from t1 left  join t2 on (t1.col2=t2.col2);

               1 A A2

               2 B B2

               3 C

 

            select t1.col1,t1.col2,t2.col3 from t1 right outer join t2 on (t1.col2=t2.col2);右外连接

                 1 A A2

                 2 B B2

                        D2

             select t1.col1,t1.col2,t2.col3 from t1 right  join t2 on (t1.col2=t2.col2); 

               1 A A2

               2 B B2

                      D2

 

            select t1.col1,t1.col2,t2.col3 from t1 full outer join t2 on (t1.col2=t2.col2);全外连接

              1 A A2

               2 B B2

 

         描述一下:  

                            情景:

                                  集合1    记录a 

                                  集合2    记录b

                                 关联字段 id

                            如 集合1 左外联 集合2

                            1内连接等同于关联查询

                             2外连接

                                          (1)左外联   如果集合1中为空 则均为空 如果集合1中不为空 集合2为空 则显示为集合1+null(显示集合2的字段只是只为null)   

                                           (2)右外联 同理(1)

                                            (3)全外联 集合1和集合2都有的数据都显示

业务逻辑:

(1)支付   查询支付表 数据格式 平台流水号+清算日期+集合(每一个元素都是一个支付交易)

(2)业务   同理(1)

(3)支付+业务 

          通过一个数据模型来描述

          select   集合1  left  join on 集合2 ,集合1 又是一个主单表 left join 业务表 on ,集合2 是一个主单表 left join 业务表 on

集合1如下

          


         当主单表中数据不为空 业务表中数据为空时 则显示主单表数据+null 但由于一个where条件时间的限制 出现的效果是 null 

        (要理解这个sql 得需要嗅到这一点)

        另外一个小的知识点

         left join on and 条件1 where 条件 



设计方案:

(1)原先

                   1有一个sql系统函数 效率比较慢

                   2sql比较长 效率比较低

(2)现在:

                   1去掉系统函数 拼接字符串 拿到程序中实现

                   2将长的sql写成几个简短的sql  分别获得集合1 集合2 然后在程序中获得集合3 

两个方案的优缺点:

对于这次写博客最大的进步是:之前我只是以为写博客最大的目的是让自己反思 整理 总结,并不太关心读者是否能够看懂,现在我意识到能够说的或写的让读者可以看懂是自己对待写内容更深层次的理解,是更大的锻炼,加油boy,you can do it 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐