一条SQL语句执行批量修改

  1. UPDATE mytable SET
  2. myfield = CASE id
  3. WHEN 1 THEN 'value'
  4. WHEN 2 THEN 'value'
  5. WHEN 3 THEN 'value'
  6. END
  7. WHERE id IN (1,2,3)

例如

  1. UPDATE categories SET
  2. display_order = CASE id
  3. WHEN 1 THEN 3
  4. WHEN 2 THEN 4
  5. WHEN 3 THEN 5
  6. END,
  7. title = CASE id
  8. WHEN 1 THEN 'New Title 1'
  9. WHEN 2 THEN 'New Title 2'
  10. WHEN 3 THEN 'New Title 3'
  11. END
  12. WHERE id IN (1,2,3)

这句sql的意思是,更新display_order 字段,如果id=1 则display_order 的值为3,如果id=2 则 display_order 的值为4,如果id=3 则 display_order 的值为5。
即是将条件语句写在了一起。
这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。

如果是多条件:

  1. UPDATE test_user SET
  2. `password` = CASE
  3. WHEN id=1 AND name='rose' THEN '2fffffffff'
  4. WHEN id=2 AND name='jack' THEN '2fddddddd'
  5. ELSE `password` END

或者多字段多条件

  1. UPDATE `table` SET
  2. total = CASE
  3. WHEN goodsid=50 AND id=21 AND storeid=3 THEN 86
  4. WHEN goodsid=49 AND id=22 AND storeid=3 THEN 85
  5. ELSE total END ,
  6. openid = CASE
  7. WHEN goodsid=50 AND id=21 AND storeid=3 THEN 'aaa'
  8. WHEN goodsid=49 AND id=22 AND storeid=3 THEN 'bbb'
  9. ELSE openid END

例如:

  1. UPDATE `ims_sz_yi_store` SET
  2. `district_id` = CASE
  3. WHEN id=5 AND uniacid=2 THEN 3
  4. WHEN id=8 AND uniacid=3 THEN 7
  5. ELSE `district_id` END

通过新增临时表的方法

  1. create temporary table tmp(id int(4) primary key,dr varchar(50));
  2. insert into tmp values (0,'gone'), (1,'xx'),...(m,'yy');
  3. update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;


相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!