0

異なるデータベースに 2 つのテーブルがあります。レコード数の違いを見つけようとしています。これまでのところ、私は試しました:

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

table1 に対応するエントリがない table2 のレコードがあります。

内部クエリは、table1 にも対応する table2 の値のみを選択します。

したがって、table1 に ID がある場合

1
3
5

テーブル 2 には ID があります

1
3
7

行 1 と 3 は一致しますが、7 は何にも一致しないため、カウント 1 (id 5) が表示されます。

于 2013-06-07T16:51:01.147 に答える
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 に答える
0

これはあなたが望むものです:

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

あなたが書いたものはまったく別のものです。

[アップデート]

2番目のデータベースに存在しない最初のデータベースのレコード数をカウントしようとしている場合、クエリは正しいですが、評価は正しくありません。算術減算の結果を集合減算と比較することはできません。それらはまったく異なる概念です。

于 2013-06-07T16:52:14.847 に答える