mybatis中merge into批量使用問題
阿新 • • 發佈:2019-01-03
insert 和update中所有的資料都需要從using中獲取,這樣就能達到批量merge into的效果了
MERGE INTO TM_USER_CART_INFO T1
USING
(
<foreach collection="list" item="item" index="index" separator="union" >
SELECT
CASE WHEN TEMP1.F_CART_ID IS NULL THEN TEMP.F_CART_ID ELSE TEMP1.F_CART_ID END F_CART_ID,
TEMP.F_GOODS_NUM,
TEMP.F_USER_ID,
TEMP.F_REGION_NUM,
TEMP.F_CHANNEL_NUM,
TEMP.F_GOODS_COUNT
FROM
(SELECT #{cartId} F_CART_ID,#{goodsNum} F_GOODS_NUM,#{userId} F_USER_ID,#{regionNum} F_REGION_NUM,#{channelNum} F_CHANNEL_NUM,#{goodsCount} F_GOODS_COUNT FROM DUAL) TEMP
LEFT JOIN
(
SELECT * FROM TM_USER_CART_INFO T2
WHERE 1=1 AND T2.F_USER_ID = #{userId}
AND T2.F_GOODS_NUM = #{goodsNum}
AND T2.F_REGION_NUM = #{regionNum}
AND T2.F_CHANNEL_NUM = #{channelNum}
and NOT EXISTS (SELECT '' FROM TM_USER_CART_MARKET T3 WHERE T3.F_CART_ID = T2.F_CART_ID)
)TEMP1 ON TEMP1.F_GOODS_NUM = TEMP.F_GOODS_NUM
</foreach>
) T
ON (T1.F_CART_ID = T.F_CART_ID)
WHEN MATCHED THEN
UPDATE SET T1.F_GOODS_COUNT = T1.F_GOODS_COUNT + T.F_GOODS_COUNT, T1.F_UPDATE_TIME = (SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') FROM DUAL)
WHEN NOT MATCHED THEN
INSERT
(F_CART_ID, F_CHANNEL_NUM, F_MERCHANT_NUM, F_USER_ID, F_GOODS_NUM, F_GOODS_COUNT, F_ADD_TIME, F_REGION_NUM)
VALUES
(T.F_CART_ID, T.F_CHANNEL_NUM, '', T.F_USER_ID, T.F_GOODS_NUM, T.F_GOODS_COUNT,
MERGE INTO TM_USER_CART_INFO T1
USING
(
<foreach collection="list" item="item" index="index" separator="union" >
SELECT
CASE WHEN TEMP1.F_CART_ID IS NULL THEN TEMP.F_CART_ID ELSE TEMP1.F_CART_ID END F_CART_ID,
TEMP.F_GOODS_NUM,
TEMP.F_USER_ID,
TEMP.F_REGION_NUM,
TEMP.F_CHANNEL_NUM,
TEMP.F_GOODS_COUNT
FROM
(SELECT #{cartId} F_CART_ID,#{goodsNum} F_GOODS_NUM,#{userId} F_USER_ID,#{regionNum} F_REGION_NUM,#{channelNum} F_CHANNEL_NUM,#{goodsCount} F_GOODS_COUNT FROM DUAL) TEMP
LEFT JOIN
(
SELECT * FROM TM_USER_CART_INFO T2
WHERE 1=1 AND T2.F_USER_ID = #{userId}
AND T2.F_GOODS_NUM = #{goodsNum}
AND T2.F_REGION_NUM = #{regionNum}
AND T2.F_CHANNEL_NUM = #{channelNum}
and NOT EXISTS (SELECT '' FROM TM_USER_CART_MARKET T3 WHERE T3.F_CART_ID = T2.F_CART_ID)
)TEMP1 ON TEMP1.F_GOODS_NUM = TEMP.F_GOODS_NUM
</foreach>
) T
ON (T1.F_CART_ID = T.F_CART_ID)
WHEN MATCHED THEN
UPDATE SET T1.F_GOODS_COUNT = T1.F_GOODS_COUNT + T.F_GOODS_COUNT, T1.F_UPDATE_TIME = (SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') FROM DUAL)
WHEN NOT MATCHED THEN
INSERT
(F_CART_ID, F_CHANNEL_NUM, F_MERCHANT_NUM, F_USER_ID, F_GOODS_NUM, F_GOODS_COUNT, F_ADD_TIME, F_REGION_NUM)
VALUES
(T.F_CART_ID, T.F_CHANNEL_NUM, '', T.F_USER_ID, T.F_GOODS_NUM, T.F_GOODS_COUNT,
(SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') FROM DUAL), T.F_REGION_NUM)
#{xxxx} 改成 #{item.xxxx}
轉載自:http://bbs.csdn.net/topics/390940098