我正在尝试比较不同数据库中的两个表(或寻找最佳方法)。
数据库一中的表:
id int(11)
lastmod int(11)
数据库二中的表:
id int(11)
timestamp int(11)
两个表都有匹配的ID(id在db1中不是唯一的。就像一个(db2)到多个(db1))和时间戳(但其他列不同)。但随着时间的推移,数据库2中的记录将被更新(数据在一个不重要的列中)。现在我需要找到记录(时间戳),比较id,找到我需要在数据库1中更新的记录。 问题还在于性能,因为两个表都有超过5 000 000条记录。 查找需要更新的记录的最佳方式(最佳)是什么?
答案 0 :(得分:2)
假设id
是两个表中的主键,那么以下内容应该是有效的:
select *
from db1.table t1 join
db2.table t2
on t1.id = t2.id and
t1.lastmod <> t2.timestamp
请注意,这假设有两件事。首先,id
在每个表中都是唯一的,其次是时间戳列不是NULL
。
编辑:
如果情况是您在t1
中进行了多次修改并且正在尝试将结果与只有一行的t2
进行比较,那么首先汇总t1
以获得最多最近修改日期并从那里开始:
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
。