mysql实现多表关联更新的详细方法
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,不知道大家之前对类似mysql实现多表关联更新的详细方法的文章有无了解,今天我在这里给大家再简单的讲讲。感兴趣的话就一起来看看正文部分吧,相信看完mysql实现多表关联更新的详细方法你一定会有所收获的
千家信息网最后更新 2025年02月24日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安全错误
数据库的锁怎样保障安全
我的世界服务器玩家在线时间指令教程
网络安全将发生哪些变化
网络安全攻防一体机
免费安全共享网络安全吗
目前使用的数据库模型
举办网络安全讲座翻译
诺亚传说手机连接不了服务器
互联网科技有限公司复工
泰拉瑞亚手游服务器ip地址推荐
全民奇迹服务器角色
打印服务器软件
发布会上海网络安全
宝塔访问不到数据库
关于网络安全的宣传活动方案
Mac用什么软件开发
数据库审计 问题
网络安全催化方法
网络安全师需要学c语言吗
永恒之塔1717数据库
数据库同步技术方法
网络安全防护概念
同学录软件开发需求文档
信息网络安全屏障
鲸钱包 服务器开小差
打印服务器软件
昌平区技术软件开发口碑推荐
腾讯斗地主软件开发
池州oa管理软件开发定制
网络安全问题用英语
兴化自动网络技术诚信合作