我在不同的数据库上有两个表。我试图找到记录数量的差异。到目前为止,我已经尝试过:
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
获得准确的差异。这是更复杂查询的简化版本。
答案 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 ║ ╚════╩══════════════════╝
“记录数量差异的定义”可能意味着许多事情。例如,
SELECT ABS((SELECT COUNT(*) FROM DB1.TBL) - (SELECT COUNT(*) FROM DB2.TBL))
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
有趣的是,请注意您的行数差异永远不会高于您的第一个查询结果。