mysql更新插入嵌入条件(on duplicate key update)

遇到一个业务场景,数据库不存在这条数据则插入,有这条数据则更新,但是更新需要id条件相等,在on duplicate key update中并不能直接写入where条件。

数据库采用唯一id字段做主键,在on duplicate key update时插入得判断id存不存在。

最后采用WHEN+IF形式

INSERT INTO `example_table` (
    <if test='id != null'>id,</if>
    field1, field2, field3, field4, field5,
    field6, field7, field8, field9, field10,
    field11, field12, field13, field14, field15
) VALUES (
    <if test='id != null'>#{id},</if>
    #{field1}, #{field2}, #{field3}, #{field4}, #{field5},
    #{field6}, #{field7}, #{field8}, #{field9}, #{field10},
    #{field11}, #{field12}, #{field13}, #{field14}, #{field15}
)
<if test='id != null'>
    ON DUPLICATE KEY UPDATE
    field1 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field1) ELSE field1 END,
    field2 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field2) ELSE field2 END,
    field3 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field3) ELSE field3 END,
    field4 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field4) ELSE field4 END,
    field5 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field5) ELSE field5 END,
    field6 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field6) ELSE field6 END,
    field7 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field7) ELSE field7 END,
    field8 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field8) ELSE field8 END,
    field9 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field9) ELSE field9 END,
    field10 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field10) ELSE field10 END,
    field11 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field11) ELSE field11 END,
    field12 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field12) ELSE field12 END,
    field13 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field13) ELSE field13 END,
    field14 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field14) ELSE field14 END,
    field15 = CASE WHEN VALUES(id) = #{id} THEN VALUES(field15) ELSE field15 END
</if>;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值