Mysql 计数显示不正确?

Mysql 计数显示不正确?,mysql,sql,Mysql,Sql,我在不同的数据库上有两个表。我试图找出记录数量上的差异。到目前为止,我已经尝试: select COUNT(*) from tabel1 a1 where not exists ( select * from db2.table1 a2 where a1.id = a2.id ); 返回31298。但如果我自己对这些表进行计数,我会得到以下结果: SELECT COUNT(*) FROM Table1 -- 227429 SELECT COUNT(*) FROM d

我在不同的数据库上有两个表。我试图找出记录数量上的差异。到目前为止,我已经尝试:

select COUNT(*) 
from tabel1 a1 
where not exists 
(
  select * 
  from db2.table1 a2 
  where a1.id = a2.id
);
返回
31298
。但如果我自己对这些表进行计数,我会得到以下结果:

SELECT COUNT(*) FROM Table1 --  227429 

SELECT COUNT(*) FROM db2.Table1 --  256406 
这是与
28977
记录的差异。有人能看到我在做什么会导致计数上的差异吗

更新

我知道我可以通过减去计数来确定差值。我想知道的是,是否有可能使用
not exists
获得准确的差异。这是一个更复杂查询的简化版本。

这个如何:

SELECT (SELECT COUNT(*) FROM Table1) - (SELECT COUNT(*) FROM db2.Table1)

表2中有一些记录在表1中没有任何对应的条目

内部查询只选择表2中与表1对应的值

所以如果表1有ID

1
3
5
表2有ID

1
3
7
您将看到计数1(id 5),因为第1行和第3行匹配,但第7行不匹配任何内容

这就是你想要的:

SELECT ((SELECT COUNT(*) FROM Table1)) - ((SELECT COUNT(*) FROM db2.Table1))
你写的那本完全不同

[更新]


如果您试图计算第一个数据库中第二个数据库中不存在的记录数,则您的查询是正确的,但您的评估是错误的。你不能比较算术减法和集合减法的结果。它们是完全不同的概念。

以下是示例数据

DB1.TBL

╔════╦══════════════════╗ ║ ID ║ Name ║ ╠════╬══════════════════╣ ║ 1 ║ invisal ║ ║ 2 ║ Thomas Jones-Low ║ ║ 4 ║ Mehran ║ ║ 6 ║ Abe Miessler ║ ╚════╩══════════════════╝
  • 如果您谈论的是“不同记录的数量”,则有4条

您的db2.table1可能有一些db1中不存在的ID。因此,它显示的行数差异较小。 e、 g.db1.1表1中

1 Apple
2 Orange
3 Banana
1 Apple
4 Pineapple
db2.table1具有

1 Apple
2 Orange
3 Banana
1 Apple
4 Pineapple
您的第一个查询将返回结果2。 行计数比较将返回1


有趣的是,请注意,行计数的差异永远不会大于第一个查询结果。

两个表中是否有重复的ID?这就解释了。您似乎在计算匹配
id
s的差异,而不是记录数的差异。例如,两个表可能有相同数量的记录,但如果它们的
id
值都不同,您将得到227429个结果。您基本上只是看到表1中的id字段在另一个表中不存在的频率。这不一定是记录计数的差异。它们似乎是两个完全不同的请求。谢谢,我实际上正在尝试使用
在不存在的地方
来找出差异。我更新了我的问题,为什么?我认为你必须更新你的问题与你正在试图做什么。你的问题是你在试图找出记录数量上的差异。听起来你可能在找别的东西。A的计数不在B中吗?谢谢,我实际上是想通过
在不存在的地方
来计算是否可以得到差异。我更新了我的问题。
1 Apple
4 Pineapple