我有以下 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 检查中?
基本思想是,如果新值不为空,则使用 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 表达式。