Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与MySQL中不同数据库中的另一个表相比,如何从一个表中获取缺少的行?_Mysql - Fatal编程技术网

与MySQL中不同数据库中的另一个表相比,如何从一个表中获取缺少的行?

与MySQL中不同数据库中的另一个表相比,如何从一个表中获取缺少的行?,mysql,Mysql,我有两个表有超过200000行,它们应该是相同的,除了一个比另一个多3行。我想弄清楚它们是哪一行。每个表都位于不同的数据库中。我如何在MySQL中做到这一点 我试过这个: SELECT t1.* FROM db1.tb1 t1 LEFT JOIN db2.tb2 ON tb1.col_13 = tb2.col_13 WHERE tb2.col_13 IS NULL; 但这要花很长时间 编辑 因为col_13都是重复的,所以这不起作用。 问题是我在表之间找不到Commo主键,它们之间的主键

我有两个表有超过200000行,它们应该是相同的,除了一个比另一个多3行。我想弄清楚它们是哪一行。每个表都位于不同的数据库中。我如何在MySQL中做到这一点

我试过这个:

SELECT t1.* 
FROM db1.tb1 t1 
LEFT JOIN db2.tb2 ON tb1.col_13 = tb2.col_13 
WHERE tb2.col_13 IS NULL;
但这要花很长时间

编辑

因为col_13都是重复的,所以这不起作用。
问题是我在表之间找不到Commo主键,它们之间的主键是datetime,几乎相同,但由于用于将数据插入每个表的脚本不同,一些行由于舍入而具有不同的秒数,例如:“2015-09-01 00:00:11”和“2015-09-01 00:00:12”是相同的行,但由于舍入,它们的秒数不同。

伊斯顿的评论是正确的。您正在正确执行查询。您的问题不是连接两个数据库,而是查询性能。为了解决这个问题,需要更多关于表结构的详细信息。他的建议是很好的出发点,即确保在两个数据库中都是唯一且索引的列上进行连接。这将允许查询尽快执行


如果您自己无法轻松解决问题,最好是问一个新问题,这一次将重点放在性能上,并提供更多关于表结构的详细信息。

这应该只需要一两秒钟,因为您的查询看起来非常棒,所以您可能需要向列13添加索引。如果只运行一次或两次,您可能不需要它,但如果它经常运行,我会添加索引。

我相信这会起作用,但如果时间太长,您可能希望扩展到更多的连接和where条件。如果col_13中有任何重复项,则将在每个重复项上加入。例如,如果两个表中都有一个重复的值,那么不同的组合将产生4行。最佳做法是在主键列上进行连接——其中一列填充了唯一的ID、时间戳或等效项。好的,问题是第13列都是重复的,这就是为什么它需要很长时间并且无法工作的原因。问题是他们共享的列(datetime)有时由于舍入而不同;一个将00:01:12作为时间,另一个将00:01:11作为时间。但它们应该是一样的。如何解决此问题?您是否认为由于舍入而略有不同的行不应被视为丢失?如果是这样,您可以使用DATEDIFF,将缺少的行定义为每个表中col_13之间的分钟差大于1的行。例如,这些表是如何填充的?是否可以同时在表中填充数据以确保时间戳正确?此外,所有行之间的距离有多近。取整《纽约时报》会引发问题吗?