首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:选择两个数据库中时间戳不匹配的所有行

MySQL:选择两个数据库中时间戳不匹配的所有行
EN

Stack Overflow用户
提问于 2013-07-04 22:11:50
回答 1查看 669关注 0票数 0

我正在尝试比较不同数据库中的两个表(或者寻找一种最好的方法)。

数据库一中的表:

代码语言:javascript
复制
id  int(11) 
lastmod int(11) 

数据库二中的表:

代码语言:javascript
复制
id          int(11) 
timestamp   int(11)     

两个表都有匹配的id (id在db1中不是唯一的。如一对多(db1))和时间戳(但其他列不同)。但是随着时间的推移,数据库2中的记录将被更新(一个不重要的列中的数据)。现在我需要查找记录(时间戳),比较in,找出我需要在数据库1中更新哪些记录。性能方面也有问题,因为两个表都有超过5,000,000条记录。查找需要更新的记录的最佳方式(最优)是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-04 22:30:39

假设id是两个表中的主键,那么以下代码应该是有效的:

代码语言:javascript
复制
select *
from db1.table t1 join
     db2.table t2
     on t1.id = t2.id and
        t1.lastmod <> t2.timestamp

请注意,这假设了两件事。首先,时间戳列在每个表中都是惟一的,其次,id列不是NULL

编辑:

如果您在t1中有多个修改,并尝试将结果与只有一行的t2进行比较,则首先聚合t1以获取最新的修改日期,然后从该日期开始:

代码语言:javascript
复制
select *
from (select t1.id, max(t1.lastmod) as lastmod
      from db1.table t1
      group by t1.id
     ) t1 join
     db2.table t2
     on t1.id = t2.id and
        t1.lastmod <> t2.timestamp

如果您确实要在t1中查找具有多个修改的记录,则将having count(*) > 1添加到子查询中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17472511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档