计数没有正确显示?

时间:2013-06-07 16:45:53

标签: 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 db2.Table1 --  256406 

28977记录的区别。任何人都可以看到我在做什么会导致计数差异吗?

更新

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

5 个答案:

答案 0 :(得分:1)

这个怎么样:

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

答案 1 :(得分:1)

table2中有记录在table1中没有任何相应的条目。

您的内部查询仅选择table2中也与table1对应的值。

所以如果table1有ID

1
3
5

,表2有ID

1
3
7

你会看到计数为1(id 5),因为第1行和第3行匹配,但7与任何东西都不匹配。

答案 2 :(得分:0)

这就是你想要的:

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

你写的那个是完全不同的。

<强> [UPDATE]

如果您尝试计算第一个数据库中第二个中不存在的记录数,那么您的查询是正确的,但您的评估不正确。您无法将算术减法的结果与集减法进行比较。它们是完全不同的概念。

答案 3 :(得分:0)

以下是样本数据

DB1.TBL

╔════╦══════════════════╗
║ ID ║       Name       ║
╠════╬══════════════════╣
║  1 ║ invisal          ║
║  2 ║ Thomas Jones-Low ║
║  4 ║ Mehran           ║
║  6 ║ Abe Miessler     ║
╚════╩══════════════════╝

DB2.TBL

╔════╦══════════════════╗
║ ID ║       Name       ║
╠════╬══════════════════╣
║  1 ║ invisal          ║
║  2 ║ Thomas Jones-Low ║
║  3 ║ Gordon Linoff    ║
║  8 ║ Martijn Pieters  ║
╚════╩══════════════════╝

“记录数量差异的定义”可能意味着许多事情。例如,

  • 如果你谈论“行总数”,那么DB1.TBL和DB2.TBL的差异为0。
SELECT
ABS((SELECT COUNT(*) FROM DB1.TBL) -
    (SELECT COUNT(*) FROM DB2.TBL))
  • 如果你谈论“不同记录的数量”,那么就有4个
SELECT
(SELECT COUNT(*) FROM DB1.TBL) +
(SELECT COUNT(*) FROM DB2.TBL) -
(SELECT COUNT(*) FROM 
 DB1.TBL INNER JOIN DB2.TBL 
 ON DB1.TBL.id = DB2.TBL.id
) * 2

答案 4 :(得分:0)

你的db2.table1可能有一些db1中不存在的id。因此,它显示出行数差异的差异较小。 例如db1.table1有

1 Apple
2 Orange
3 Banana

db2.table1有

1 Apple
4 Pineapple

您的第一个查询将返回2的结果。 您的行计数比较将返回1

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