1. postgresql (update 支持 from)
update test set info=tmp.info from (values (1,'new1'),(2,'new2'),(6,'new6')) as tmp (id,info) where test.id=tmp.id;
mybatis
<update id="updateBatch">
update send_warn_sms_to
<set>
message=tmp.message
</set>
from (
values
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.message})
</foreach>
) as tmp(id, message)
<where>
send_warn_sms_to.id=tmp.id
</where>
</update>
2. case when
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
还可以参考:Oracle 联表更新(复杂查询及作用域)