有段时间没有在博客上发表过内容了,都写在了文档上了,有时间全都整理发表出来,可以让应聘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 李四
是拿着上面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