不知道大家之前对类似mysql实现多表关联更新的详细方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql实现多表关联更新的详细方法你一定会有所收获的只,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
创建以下的简单模型,并构造部分测试数据:
在某个业务受理子系统BSS中,
由于某些原因,客户所在城市这个信息并不什么准确,但是在客户服务部的CRM子系统中,通过主动服务获取了部分客户的20%所在城市等准确信息,于是你将该部分信息提取至一张临时表中:
tmp_cust_city创建表 ( customer_id数量(8)不是零, citye_name varchar2(10)非空, customer_type char (2) not null )
1)最简单的形式
<>之前,经确认客户表中所有customer_id小于1000均为& # 39;北京& # 39; ——1000以内的均是公司走向全国之前的本城市的老客户:) 更新客户 设置city_name=& # 39;北京& # 39; customer_id<10002)两表(多表)关联更新——仅在字在句中的连接
<>之前,这次提取的数据都是贵宾,且包括新增的,所以顺便更新客户类别吗 更新客户——使用别名 设置customer_type=& # 39; 01 & # 39;- - - 01为贵宾,00为普通 存在(选择1 从tmp_cust_city b b.customer_id=a.customer_id )3)两表(多表)关联更新——被修改值由另一个表运算而来
<>之前更新客户——使用别名 设置city_name=(选择b。从tmp_cust_city b city_name b.customer_id=a.customer_id) 存在(选择1 从tmp_cust_city b b.customer_id=a.customer_id ) ——更新超过2个值 更新客户——使用别名 集(city_name customer_type)=(选择b.city_name b.customer_type 从tmp_cust_city b 在b.customer_id=a.customer_id) 存在(选择1 从tmp_cust_city b b.customer_id=a.customer_id )注意在这个语句中,
<>之前(选择b.city_name b.customer_type 从tmp_cust_city b b.customer_id=a.customer_id ) 与 (选择1 从tmp_cust_city b b.customer_id=a.customer_id )是两个独立的子查询,查看执行计划可知,对b表/索引扫描了2篇;
如果舍弃的条件,则默认对一个表进行全表
更新,但由于(选择b。city_name从tmp_cust_city b b.customer_id=a.customer_id)
有可能不能提供“足够多,值,因为tmp_cust_city只是一部分客户的信息,
所以报错(如果指定的列——city_name可以为零则另当别论):
01407年,00000年,“不能更新(% s) NULL"
//*原因:
//*行动:
替换的方法:
<>之前更新客户——使用别名 设置city_name=nvl((选择b。从tmp_cust_city b city_name b.customer_id=a.customer_id), a.city_name) 或者 设置city_name=nvl((选择b。从tmp_cust_city b city_name b.customer_id=a.customer_id), & # 39;未知& # 39;) ——当然这不符合业务逻辑了一个比较简便的方法就是将一个表代入值表达式中,使用group by和有字句查看重复的纪录。
<>之前(选择b.customer_id、b.city_name count (*) 从tmp_cust_city b,客户 b.customer_id=a.customer_id 组由b.customer_id b.city_name 在count(*)在=2 )看完mysql实现多表关联更新的详细方法这篇文章,大家觉得怎么样?如果想要了解更多相关,可以继续关注我们的行业资讯板块。