MYSQL、MySQL、MySql、mysql 批量更新SQL写法实践

末蓝、 2024-02-18 21:23 183阅读 0赞

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

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

组织表:ou_org:

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

组织类型表:ou_orgtype:

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

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

70

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

  1. update ou_org o set o.affiliation = "NONE"
  2. where 1=1 and o.id in (
  3. (
  4. select oo.id from
  5. (
  6. select
  7. o.id,o.orgtype_id
  8. from ou_org o
  9. left join ou_orgtype ot on o.orgtype_id = ot.id
  10. where 1=1
  11. and o.dr is not NULL
  12. and ot.dr is not NULL
  13. and ot.`code` in ('03','04')
  14. ) as oo
  15. )
  16. )
  17. ;

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

发表评论

表情:
评论列表 (有 0 条评论,183人围观)

还没有评论,来说两句吧...

相关阅读