如何从日期两个Mysql表中获取Delta

时间:2018-01-26 11:51:44

标签: mysql

我有两个具有相同结构的mysql表。现在我想让table1中的所有记录比table2中的相同记录更新。

table 1

id    name   namespace   updated
437   test   test/test1  2016-09-02 09:17:13
436   test   test/test2  2016-09-04 09:17:13
435   test   test/test3  2016-09-05 09:17:13

table 2
id    name   namespace   updated
433   test   test/test1  2016-09-02 09:17:13
434   test   test/test2  2016-09-04 09:17:13
437   test   test/test3  2016-09-04 09:17:13

结果总是超出预期

这是我的陈述

SELECT a.`id` , a.`name` , a.`namespace`, a.`created` , 
a.`updated` 
FROM table1 AS a
LEFT JOIN table2 AS b ON a.`name` = b.`name` 
AND a.`namespace` = b.`namespace` 
WHERE a.`updated` > b.`updated` 

怎么了?

谢谢你。

2 个答案:

答案 0 :(得分:1)

如果你在左边连接表中使用左连接don设置值在where子句中,否则它们用作内部连接

将ON添加到您的ON子句

并最后检查未连接行的空左连接值

  SELECT a.`id` , a.`name` , a.`namespace`, a.`created` , 
  a.`updated` 
  FROM table1 AS a
  LEFT JOIN table2 AS b ON a.`name` = b.`name` 
  AND a.`namespace` = b.`namespace` and  a.`updated` > b.`updated` 
  where b.id is null  

尽量避免毫秒

SELECT a.`id` , a.`name` , a.`namespace`, a.`created` , 
  a.`updated` 
  FROM table1 AS a
  LEFT JOIN table2 AS b ON a.`name` = b.`name` 
  AND a.`namespace` = b.`namespace` 
   and DATE_FORMAT(a.`updated`,'%Y-%m-%d %H:%i') > DATE_FORMAT(b.`updated`,'%Y-%m-%d %H:%i')
  where b.id is null  

答案 1 :(得分:0)

好的,所以我想出了一个解决方案,它始终会返回每个namespace的最新ID。

为此,我创建了一个{{3}},并提出了以下代码:

SELECT * FROM
    (SELECT * FROM table1 
     UNION
     SELECT * FROM table2
     ORDER BY updated DESC
    ) A
GROUP BY A.namespace
ORDER BY updated DESC
  

这并没有发现一个id可能是2个名称空间的最新内容