zoukankan      html  css  js  c++  java
  • pgsql 批量更改 update

    https://www.cnblogs.com/ldj3/p/9288187.html

    批量更改 update

    一般的方式

    <update id="updateData">
    <foreach collection="list" item="obj" separator=";">
    UPDATE jo_table  
    SET product_number = #{obj.subNum}
    WHERE
    club_id = #{obj.clubId}
    AND product_sn =#{obj.goodsSn}
    </foreach>
    </update>
    一条记录update一次,这样性能很差。


    一句sql,性能更佳的方式:CASE WHEN THEN ELSE

      <update id="handleAbnormal">
        UPDATE jo_table  SET
          product_number =
          CASE id
          <foreach collection="list" item="obj" separator=";">
           WHEN #{obj.id} THEN product_number - #{obj.number}
          </foreach>
        ELSE product_number
        END
        WHERE id IN
        <foreach collection="list" item="obj" separator="," open="(" close=")">
          #{obj.id}
        </foreach>
      </update>

    记住一定要加上 else 的情况,如果不加的话,当when条件不符合时,会导致你要修改的字段被置空,是很危险的。


    其次,如果是多个字段更新:
    <update id="updateBatch">
    UPDATE jo_table SET

    column1 =
    CASE id
    <foreach collection="list" item="obj" separator=";">
    WHEN #{obj.id} THEN #{obj.column1}
    </foreach>
    ELSE column1
    END,

    column2 =
    CASE id
    <foreach collection="list" item="obj" separator=";">
    WHEN #{obj.id} THEN #{obj.column2}
    </foreach>
    ELSE column2
    END

    WHERE id IN
    <foreach collection="list" item="obj" separator="," open="(" close=")">
    #{obj.id}
    </foreach>
    </update>


    另外:
    如果是要多个条件的话,可以拼接的方式来判断:

    如:

    update jo_table  set number
    CASE concat(字段1,字段2)

    <foreach collection="list" item="obj" separator=";">
    WHEN concat(#{obj.字段1},#{obj.字段2}) THEN #{obj.number}
    </foreach>
    ELSE number
    END








  • 相关阅读:
    软件工程期末考试复习(五)
    软件工程期末考试复习(四)
    软件工程期末考试复习(三)
    软件工程期末考试复习(二)
    shell脚本与mongo交互
    python使用单例模式创建MySQL链接
    python with上下文的浅谈
    Docker 基础概念科普 和 常用操作介绍
    MySQL聚集索引和非聚集索引
    为什么选择Python
  • 原文地址:https://www.cnblogs.com/mjbenkyo/p/12577128.html
Copyright © 2011-2022 走看看