• 主页
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
阳二快跑 阿里巴巴 开发组长/高级工程师/技术专家  2014年01月06日
merge into语句操作一个表产生重复记录的问题
需求:
产品评分表,一个产品同一个用户只能评一次分,且以最后一次为准。
最开始使用的方式是先update,如果影响行数为0,则进行插入。
后面修改为一条sql实现(mybatis):
MERGE INTO P_GRADE P0
USING DUAL
ON (P0.PRODUCT_ID = #{productId} AND P0.USER_ID = #{userId})
WHEN MATCHED THEN
UPDATE SET UPDATE_TIME = SYSDATE, USER_GRADE = #{userGrade}
WHEN NOT MATCHED THEN
INSERT
(PRODUCT_ID, CREATE_TIME, USER_GRADE)
VALUES
(#{productId}, #{userId}, SYSDATE, #{userGrade})

在测试环境中,用户少,没有产生重复的数据,但在正式环境就产生了产品id和用户id重复的数据(1%左右)。
请问merge into适用这个场景吗? 如果可以的话应该怎么改进这个sql。如果不适用的话,还有什么比较高效的方式来实现?
...全文
302 点赞 收藏 7
写回复
7 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Oracle
创建于2007-09-28

6408

社区成员

5.4w+

社区内容

Oracle开发相关技术讨论
社区公告
暂无公告