java找茬_一起来找茬(1)-开发写的神奇左连接

近期在给客户做新数据交换方案调试时发现一处视图创建语句带不出数据。

精简需求后如下:a部门从b部门获取主体数据,由于a、b两部门有些代码标准不一致需要做转换。于是开发写了个对照表做转换生成业务视图。

主表zb数据如下,B_MD1和B_DM2是两种类型代码,分别是lx1和lx2(比如一个是证件类型代码一个地址行政区划代码)。主表某些字段有缺失数据的情况。

20190420131812563260.png

为图省事,开发将不同类型的代码对照表记录在同一张对照表(dzb)中,如下图

20190420131812591582.png

业务需求是创建视图查出所有主表的数据,允许出现某些字段数据缺失的情况。并将两部门标准不一致的代码做转换。然后开发这货写出了如下视图。

CREATE VIEW V_ZB AS

SELECTZB.ID, ZB.NAME, LX1.A_DM DM1, LX2.A_DM DM2FROMZBLEFT JOINDZB LX1ON ZB.B_DM1 =LX1.B_DMLEFT JOINDZB LX2ON ZB.B_DM2 =LX2.B_DMWHERE LX1.LX = ‘lx1‘

AND LX2.LX = ‘lx2‘;

得到如下结果。什么......李四去哪了?Σ( ° △ °|||)︴调试的时候是一万多主表数据,视图里一条都没能查出来。(╯°Д°)╯︵┻━┻(

20190420131812647248.png

jia.gif

jian.gif

/*原因是where条件那里筛去了未连接上的数据,就是left join 变成join了。where条件那里使用对照表的lx筛选本意是想获取不同类型的对照数据(如证件类型对照、地址行政区划对照)拿来做左连接。但没连接上的对照表类型值都是null,又怎么经得起lx=某类型的筛选呢?

真实业务场景中由于某个字段经常缺数,加上需要对照转换的字段比较多,所以一条数据都出不来。

这种情况还是老老实实拆分成证件类型对照表、地址行政区划对照表这样不同的对照表。或者筛选lx=类型那里加多一个 or is null。*/

CREATE VIEW V_ZB AS

SELECT ZB.ID,ZB.NAME,LX1.A_DM DM1,LX2.A_DM DM2 FROMZBLEFT JOIN DZB LX1 ON ZB.B_DM1=LX1.B_DMLEFT JOIN DZB LX2 ON ZB.B_DM2 =LX2.B_DMWHERE (LX1.LX=‘lx1‘ OR LX1.LX IS NULL)AND (LX2.LX=‘lx2‘ OR LX2.LX IS NULL);

原因是...

修改后,得到如下图的结果就合适了(?•??•?)??

20190420131812677522.png

-------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值