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" >
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">
WHEN #{obj.id} THEN #{obj.column1}
</foreach>
ELSE column1
END,
column2 =
CASE id
<foreach collection="list" item="obj">
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