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