mysql 如何批量更新SQL写法实践

文章讲述了在MySQL中进行批量数据更新的操作过程,具体场景是将组织表中类型为03和04的组织的加盟性质更新为NONE。通过编写涉及两个表的SQL查询,使用INNERJOIN和WHERE子句来定位需要更新的记录。
摘要由CSDN通过智能技术生成

摘要:今天在上线应用的时候,遇到需要批量更新数据的SQL写法,之前都是写的单条记录,今天写个批量更新,老是失败,后来发现是语法错误,现在来记录下这个过程。

一:数据库表结构,这里涉及2个表,一个组织表ou_org、一个组织类型表ou_orgtype,它们的表结构分别如下所示:

组织表:ou_org:

CREATE TABLE `ou_org` (
  `id` bigint(20) NOT NULL,
  `code` varchar(200) COLLATE utf8_bin DEFAULT NULL,
  `name` varchar(200) COLLATE utf8_bin DEFAULT NULL,
  `describe` varchar(500) COLLATE utf8_bin DEFAULT NULL,
  `creator` bigint(20) DEFAULT NULL,
  `modifier` bigint(20) DEFAULT NULL,
  `ts_insert` datetime DEFAULT NULL,
  `ts_update` datetime DEFAULT NULL,
  `dr` bit(1) DEFAULT NULL,
  `orgtype_id` bigint(20) DEFAULT NULL,
  `affiliation` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '加盟性质(A轮/B轮/C轮/城市灯塔/无)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

组织类型表:ou_orgtype:

CREATE TABLE `ou_orgtype` (
  `id` bigint(20) NOT NULL,
  `code` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '编码',
  `name` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '名称',
  `describe` varchar(500) COLLATE utf8_bin DEFAULT NULL COMMENT '描述',
  `creator` bigint(20) DEFAULT NULL,
  `modifier` bigint(20) DEFAULT NULL,
  `ts_insert` datetime DEFAULT NULL,
  `ts_update` datetime DEFAULT NULL,
  `dr` bit(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='组织业务类型';

二:组织类型表数据如下图:

二:需求是这样的,由于组织表里面的"加盟性质"是新加的字段,现在需要把组织类型为分公司,子公司的组织的加盟性质都设置为NONE类型,也就是说,需要把组织类型为03,04的组织的加盟类型都设置为NONE类型,这里就需要通过SQL批量更新数据了,下面就是具体的SQL写法:

pdate ou_org o set o.affiliation = "NONE" 
where 1=1 and o.id in (
  (
  select oo.id from 
    (
      select
      o.id,o.orgtype_id
      from ou_org o 
      left join ou_orgtype ot on o.orgtype_id = ot.id 
      where 1=1
      and o.dr is not NULL
      and ot.dr is not NULL
      and ot.`code` in ('03','04')
    ) as oo
  )
)
;

这样组织类型为03,04的组织的加盟类型就设置为NONE类型了。

MySQL数据库工程师入门实战课程

MySQL数据库应用快速入门培训课程

mysql数据库基础技能全程实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

传说三哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值