如果日期时间值较大,则mysql使用其他表的联接更新单元格值

时间:2018-09-11 09:31:26

标签: mysql datetime join inner-join

我有2张桌子:

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

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

因此表A的第一行为:

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

依次类推,搜索每个代码,如果B表中存在,则以最新的日期时间进行更新

可以通过使用join的mysql update实现此目的吗?如果是,那怎么办?还是其他想法?

2 个答案:

答案 0 :(得分:1)

使用子查询并加入:

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

答案 1 :(得分:1)

您可以将updatejoin一起使用:

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的日期时间高于tableB的最新日期时间,则无论如何都会更新