关联查询小结

银行上午开发部整体停电,美滋滋忙里偷各闲,终于有时间更新一下我这公众号。

今天主要想总结的是关于多表关联查询。

多表关联查询就是从多张表中抽取数据,最简单的方法就是嵌套查询,对吧。就拿项目来说:项目里需要查询用户贷款的逾期状态,进而根据逾期状态来给用户打标签做参考。

确定需要使用的表

MODEL_BASEFEATURE_TRAINING:FAMILY_IDCARD(户主身份证)

ECIF_BORM:CERT_NO(身份证),ECIF_CUST_NO(客户编号)

BANCS_BORM:KEY_1(贷款账号),CUSTOMER_NO(客户编号),BAD_DEBT_IND(坏账状态)

确定关联方式

MODEL_BASEFEATURE_TRAINING.FAMILY_IDCARD=ECIF_BORM.CERT_NO

ECIF_BORM.ECIF_CUST_NO=BANCS_BORM.CUSTOMER_NO(这个地方有个坑)

直接sql查起来:

查询结果:

但是这种方法没有办法将用户的身份证号和逾期状态连接起来;所以就想到了下面的关联查询:

具体的结果如下:

什么都没有!!!

不可能啊,刚刚的查询语句已经筛选出来,怎么关联查询的方式就查不出来呢?,还记得刚刚关联方式的那个坑嘛?对,就是他,在BANCS中的字段比ECIF中的字段在开始的地方多了三个0,根本匹配不上,自然是没有结果了。修改一下:

注意最后的那个条件,从第四位开始截取一直截取16位,看一下运行的结果:

结果出来了,有木有很完美~~~有了个垫底的了,但是多表关联查询的效率非常慢,尤其是在大数据量的情况下产生大量无用的数(因为笛卡儿积的缘故),非常不建议使用,进而就想到了下面的这个:

直接将业务标签插入到模型训练表的对应字段中,看一下效果很明显

以上就是关联查询从最基本的嵌套查询一直到直接使用upadte语句,效率得到很大提高。有木有很开心~~~

另外,一定要注意字段之间关联关系的映射,就是因为BANCS_BORM中的客户号相比于ECIF中的客户号开头多了三个0,直接花了我接近一上午的时间各种找错,整个存储过程一点一点找过来,真心耗时间。

希望这篇文章对你有所帮助~~~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180531G1URLW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券