PostgreSQL INSERT INTO ON CONFLICT转H2 MERGE语法咨询
将PostgreSQL Upsert转换为H2兼容的MERGE语句
转换逻辑
PostgreSQL的INSERT ... ON CONFLICT语法对应H2的MERGE语法,核心是通过USING子句提供待插入的数据,再通过ON子句指定冲突判定字段(此处为id),分别处理匹配(更新)和不匹配(插入)的场景。
对应H2查询语句
注:原PostgreSQL语句中ON CONFLICT后的SET子句存在笔误(重复写了field3,合理逻辑应为更新field3和field4),以下按正确逻辑编写转换后的语句:
MERGE INTO dest_table USING (VALUES (?, ?, ?, ?, ?)) AS t(id, field1, field2, field3, field4) ON dest_table.id = t.id WHEN MATCHED THEN UPDATE SET field3 = t.field3, field4 = t.field4 WHEN NOT MATCHED THEN INSERT (id, field1, field2, field3, field4) VALUES (t.id, t.field1, t.field2, t.field3, t.field4);
关键说明
USING子句:把传入的参数包装为临时表t,明确字段映射关系ON子句:指定冲突判断规则(id相等即判定为冲突)WHEN MATCHED:冲突触发时执行更新,用临时表t的数值覆盖目标表对应字段WHEN NOT MATCHED:无冲突时执行插入,直接将临时表数据写入目标表
若需严格对应原PostgreSQL语句的笔误(重复更新field3),则UPDATE子句改为:
UPDATE SET field3 = t.field3, field3 = t.field4
内容的提问来源于stack exchange,提问作者fbl
相关产品推荐
相关产品推荐

