千家信息网

mysql实现多表关联更新的详细方法

发表于:2024-09-25 作者:千家信息网编辑
千家信息网最后更新 2024年09月25日,不知道大家之前对类似mysql实现多表关联更新的详细方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql实现多表关联更新的详细方法你一定会有所收获的
千家信息网最后更新 2024年09月25日mysql实现多表关联更新的详细方法

不知道大家之前对类似mysql实现多表关联更新的详细方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql实现多表关联更新的详细方法你一定会有所收获的。

创建以下的简单模型,并构造部分测试数据:
在某个业务受理子系统BSS中,

--客户资料表create table customers(customer_id number(8) not null, -- 客户标示city_name varchar2(10) not null, -- 所在城市customer_type char(2) not null, -- 客户类型...)create unique index PK_customers on customers (customer_id)

由于某些原因,客户所在城市这个信息并不什么准确,但是在客户服务部的CRM子系统中,通过主动服务获取了部分客户20%的所在城市等准确信息,于是你将该部分信息提取至一张临时表中:

create table tmp_cust_city(customer_id number(8) not null,citye_name varchar2(10) not null,customer_type char(2) not null)

1) 最简单的形式

--经确认customers表中所有customer_id小于1000均为'北京'--1000以内的均是公司走向全国之前的本城市的老客户:)update customersset city_name='北京'where customer_id<1000

2) 两表(多表)关联update -- 仅在where字句中的连接

--这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别update customers a -- 使用别名set customer_type='01' --01 为vip,00为普通where exists (select 1from tmp_cust_city bwhere b.customer_id=a.customer_id)

3) 两表(多表)关联update -- 被修改值由另一个表运算而来

update customers a -- 使用别名set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id)where exists (select 1from tmp_cust_city bwhere b.customer_id=a.customer_id)-- update 超过2个值update customers a -- 使用别名set (city_name,customer_type)=(select b.city_name,b.customer_typefrom tmp_cust_city bwhere b.customer_id=a.customer_id)where exists (select 1from tmp_cust_city bwhere b.customer_id=a.customer_id)

注意在这个语句中,

(select b.city_name,b.customer_typefrom tmp_cust_city bwhere b.customer_id=a.customer_id)与(select 1from tmp_cust_city bwhere b.customer_id=a.customer_id)

是两个独立的子查询,查看执行计划可知,对b表/索引扫描了2篇;

如果舍弃where条件,则默认对A表进行全表

更新,但由于(select b.city_name from tmp_cust_city b where where b.customer_id=a.customer_id)

有可能不能提供"足够多"值,因为tmp_cust_city只是一部分客户的信息,

所以报错(如果指定的列--city_name可以为NULL则另当别论):

01407, 00000, "cannot update (%s) to NULL"

// *Cause:

// *Action:

替换的方法:

update customers a -- 使用别名set city_name=nvl((select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id),a.city_name)或者set city_name=nvl((select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id),'未知')-- 当然这不符合业务逻辑了

一个比较简便的方法就是将A表代入 值表达式 中,使用group by 和having 字句查看重复的纪录。

(select b.customer_id,b.city_name,count(*) from tmp_cust_city b,customers a  where b.customer_id=a.customer_id group by b.customer_id,b.city_name having count(*)>=2)

看完mysql实现多表关联更新的详细方法这篇文章,大家觉得怎么样?如果想要了解更多相关,可以继续关注我们的行业资讯板块。

客户 方法 关联 更新 信息 别名 部分 城市 所在 业务 子系统 字句 数据 北京 服务 普通 简便 主动 另当别论 这不 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全考试题库及答案大全 前端分布多服务器 幼儿园如何强化网络安全 福建潮流软件开发设施服务标准 网络安全之密码安全 分布式数据库非聚集索引 服务器管理器添加角色命令 辽宁享乐吧 互联网科技 mc服务器控制台 哈尔滨工程大学网络安全研究生 川大首招网络安全人才 我的世界建造服务器需要花钱吗 数据库2017如何备份还原 剑三服务器登不上 萤石云摄像头网络安全性怎么样 医院 信息科 软件开发 1g网站服务器价格 公民网络安全培训 ups和服务器放到一起安全吗 持久化数据到数据库英文 网络安全法具体措施 环保从业人员数据库 银行软件开发员工作稳定吗 软件开发什么样的职业规划 数据库中的主键允许重复值吗 网络安全证书有哪几个 诗诚信息网络技术 软件开发人物访谈 华为数字通信通用软件开发工程师 淘宝无法解析服务器咋么办
0