pgsql 批量更改 update

Posted 魔杰Lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pgsql 批量更改 update相关的知识,希望对你有一定的参考价值。

https://www.cnblogs.com/ldj3/p/9288187.html

 

批量更改 update

 

一般的方式

 

<update id="updateData">
<foreach collection="list" item="obj" separator=";">
UPDATE jo_table  
SET product_number = #{obj.subNum}
WHERE
club_id = #{obj.clubId}
AND product_sn =#{obj.goodsSn}
</foreach>
</update>
一条记录update一次,这样性能很差。


一句sql,性能更佳的方式:CASE WHEN THEN ELSE

  <update id="handleAbnormal">
    UPDATE jo_table  SET
      product_number =
      CASE id
      <foreach collection="list" item="obj" separator=";">
       WHEN #{obj.id} THEN product_number - #{obj.number}
      </foreach>
    ELSE product_number
    END
    WHERE id IN
    <foreach collection="list" item="obj" separator="," open="(" close=")">
      #{obj.id}
    </foreach>
  </update>

记住一定要加上 else 的情况,如果不加的话,当when条件不符合时,会导致你要修改的字段被置空,是很危险的。


其次,如果是多个字段更新:
<update id="updateBatch">
UPDATE jo_table SET

column1 =
CASE id
<foreach collection="list" item="obj" separator=";">
WHEN #{obj.id} THEN #{obj.column1}
</foreach>
ELSE column1
END,

column2 =
CASE id
<foreach collection="list" item="obj" separator=";">
WHEN #{obj.id} THEN #{obj.column2}
</foreach>
ELSE column2
END

WHERE id IN
<foreach collection="list" item="obj" separator="," open="(" close=")">
#{obj.id}
</foreach>
</update>


另外:
如果是要多个条件的话,可以拼接的方式来判断:

如:

update jo_table  set number
CASE concat(字段1,字段2)

<foreach collection="list" item="obj" separator=";">
WHEN concat(#{obj.字段1},#{obj.字段2}) THEN #{obj.number}
</foreach>
ELSE number
END








 

以上是关于pgsql 批量更改 update的主要内容,如果未能解决你的问题,请参考以下文章

PgSQL中修改数据自动更新update_time

PL/PGSQL触发器如何检测UPDATE上的SQL语句中是不是提供了列?

update set语句

python-sql语句集体更改数据

最近用MyBatis做开发的时候发现,MyBatis有个小小的缺点,不支持批量update?

最近用MyBatis做开发的时候发现,MyBatis有个小小的缺点,不支持批量update?