将ibatis案例迁移到原生SQL

问题描述 投票:0回答:1

我有以下 ibatis 查询:

update users
<set>
  <if test="reference != null ">
    reference = #{reference},
  </if>
  <if test="status != null">
    status_type = #{status},
  </if>
</set>
where id = #{id.id}

如何将这些检查(XML 标签)迁移到 PostgreSQL 数据库的 SQL 检查中?

sql postgresql mybatis ibatis
1个回答
0
投票

基本思想是,如果新值不为空,则使用 coalesce(new_value, old_value) 选择新值而不是旧值:

create table users (id int, reference int, status_type int);
insert into users values (1, 1, 1), (2, 2, 2), (3, 3, 3);

update users
set reference   = coalesce(t.reference, users.reference),
    status_type = coalesce(t.status_type, users.status_type)
from (values (1, null, 11), (2, 12, null)) t(id,reference,status_type)
where users.id = t.id;

还有其他技术可以实现相同或相似的效果,例如 CASE 表达式。

© www.soinside.com 2019 - 2024. All rights reserved.