0

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

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. 这是更复杂查询的简化版本。

4

5 回答 5

1

这个怎么样:

SELECT (SELECT COUNT(*) FROM Table1) - (SELECT COUNT(*) FROM db2.Table1)
于 2013-06-07T16:50:35.993 回答
1

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

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

所以如果 table1 有 ID

1
3
5

表 2 有 ID

1
3
7

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

于 2013-06-07T16:51:01.147 回答
0

以下是样本数据

DB1.TBL

╔════╦══════════════════╗
║身份证║姓名║
╠════╬══════════════════╣
║ 1 ║ 隐蔽 ║
║ 2 ║ Thomas Jones-Low ║
║ 4 ║ 梅兰 ║
║ 6 ║ 安倍米斯勒 ║
╚════╩══════════════════╝

DB2.TBL

╔════╦══════════════════╗
║身份证║姓名║
╠════╬══════════════════╣
║ 1 ║ 隐蔽 ║
║ 2 ║ Thomas Jones-Low ║
║ 3 ║ 戈登·林诺夫 ║
║ 8 ║ 马丁·彼得斯 ║
╚════╩══════════════════╝

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

  • 如果说“总行数之差”,那么 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
于 2013-06-07T17:07:09.740 回答
0

这就是你想要的:

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

你写的是完全不同的东西。

[更新]

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

于 2013-06-07T16:52:14.847 回答
0

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

1 Apple
2 Orange
3 Banana

db2.table1 有

1 Apple
4 Pineapple

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

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

于 2013-06-07T17:26:51.920 回答