代码之家  ›  专栏  ›  技术社区  ›  user348246

如果datetime值更大,mysql使用来自其他表的join更新单元格值

  •  0
  • user348246  · 技术社区  · 6 年前

    我有两张桌子:

    表:(每个代码都是唯一的,只出现一次)

    id |      code     |       datetime      |  
    1  | 2574857458745 | 2017-05-20 20:15:30 | - update this code datetime   
    2  | 6554995949445 | 2017-07-13 11:17:40 |  
    3  | 8214687655556 | 2017-04-27 21:26:55 |  
    4  | 3354551848451 | 0000-00-00 00:00:00 |
    

    B表:(代码多次出现的地方)

    id  |      code     |       datetime      |  
    26  | 2574857458745 | 2018-07-14 16:24:20 |  - occurs here 2 times  
    47  | 6554995949445 | 2018-09-06 17:35:44 |  
    64  | 8214687655556 | 2018-03-09 22:06:12 |  
    57  | 2574857458745 | 2018-11-12 23:57:35 |  - update only with the latest datetime
    

    因此表的第一行是:

    id |      code     |       datetime      |  
    1  | 2574857458745 | 2018-11-12 23:57:35 |
    

    有没有可能通过mysql更新join来实现这一点?如果是,那么如何?或者其他想法?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Oto Shavadze    6 年前

    你可以用 update 具有 join :

    UPDATE tablea a
    JOIN (SELECT code, MAX(datetime) as maxdt FROM tableb GROUP BY code) b
    ON a.code = b.code
    SET a.datetime = b.maxdt;
    

    注意:如果tableA的datetime高于tableB的latest datetime,则仍将更新

        2
  •  1
  •   Fahmi    6 年前

    使用子查询和联接:

    update tableA a
    inner join
    (select code, max(datetime) as d
    from tableB 
    group by code)b on a.code=b.code
    set a.datetime = b.d