V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Nixus
V2EX  ›  问与答

这个 SQL 是,如果存在,就更新,不存在就插入新记录。想改成如果存在,就增量更新,不存在就插入新记录

  •  
  •   Nixus · 2016-06-16 18:03:01 +08:00 · 3318 次点击
    这是一个创建于 2879 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前是,存在就更新,不存在就插入新记录

    INSERT INTO abc(id,num,tm)VALUES(1,7,1),(2,8,1) ON DUPLICATE KEY UPDATE num=VALUES(num)

    但是这样,每次执行,就需要把所有的原始数据读一遍

    如果做增量更新,应该怎么做呢?

    比如:

    11:00

    id num tm

    1 2 06-16

    2 1 06-16

    12:00

    id num tm

    1 7 06-16

    2 8 06-16

    那么, 12 点相对于 11 点的时候, id 为 1 的记录, num 增加了 5 , id 为 2 的, num 增加了 6 。 SQL 怎样写,才能让 id 为 1 的 num 增加 5 , id 为 2 的 num 增加 6 ,同时,满足,存在就更新,不存在就插入的条件?

    6 条回复    2016-06-17 00:14:24 +08:00
    zeraba
        1
    zeraba  
       2016-06-16 18:54:31 +08:00 via Android
    sql 说这让业务层领导想好 我只是个打工的 领导让我做啥我就做啥 可本分了
    9hills
        2
    9hills  
       2016-06-16 19:06:06 +08:00 via iPhone
    说实话,没看懂
    b821025551b
        3
    b821025551b  
       2016-06-16 19:08:12 +08:00
    如果是 mysql ,可以用 REPLACE
    ETiV
        4
    ETiV  
       2016-06-16 19:47:22 +08:00   ❤️ 1
    有意思~

    前面都一样,后面: ON DUPLICATE KEY UPDATE num=VALUES(num) + `num`;
    popok
        5
    popok  
       2016-06-16 21:49:07 +08:00
    id 为 2 的, num 增加了 7 。。。。
    我看楼上的应该对了
    icegreen
        6
    icegreen  
       2016-06-17 00:14:24 +08:00
    看了两遍题目, 四楼对了;
    为自己的理解能力捉急
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2612 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:07 · PVG 22:07 · LAX 07:07 · JFK 10:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.