だから私はテーブルを持っています:
CREATE TABLE TABLE_NAME (
COLUMN_1 char(12) NOT NULL,
COLUMN_2 char(2) NOT NULL,
COLUMN_3 char(1) NOT NULL,
COLUMN_4 int NOT NULL,
COLUMN_5 char(2) NOT NULL,
COLUMN_6 money NOT NULL,
COLUMN_7 smallint NOT NULL,
COLUMN_8 varchar(10) NOT NULL,
COLUMN_9 smallint NOT NULL,
COLUMN_10 datetime NOT NULL
Primary Key (COLUMN_1, COLUMN_2, COLUMN_3)
)
SELECT COUNT(*)
とは異なる値を返しますSELECT DISTINCT COUNT(*)
。どうすればこれが可能ですか?
私も試しました
SELECT COUNT(*) FROM (
SELECT
COLUMN_1,
COLUMN_2,
COLUMN_3,
COLUMN_4,
COLUMN_5,
COLUMN_6,
COLUMN_7,
COLUMN_8,
COLUMN_9,
COLUMN_10
FROM TABLE_NAME
) TMP
これは、個別のクエリと同じカウントを返しました。
主キーとすべてのフィールドがNOTNULLの場合、一意のレコードの数とは異なる合計数になる可能性があることを確認できません。
ところで、これはSybaseASE15にあります。
不一致は50万のうち100かそこらの記録です。他のいくつかのテーブルでもこの問題が発生していますが、例として1つだけを選択しました。
編集
完全を期すために、このテーブルをリモートデータベースに完全にコピーする簡単なジョブを作成するときにこの問題を発見したことを言及する必要があります。私のアプリケーションは特定の数の読み取り/書き込み操作を記録していましたが、ソースデータベースのレコード数がターゲットデータベースのレコード数と異なるため、QAに失敗しました。両方の値はCOUNT(*)
;を介して取得されました。ターゲット(Oracle 10g)から返されたカウントは、私のアプリによって記録された読み取り/書き込み操作の数と同じでした。ソーステーブルのすべてのフィールドがNOTNULLで定義され、主キーが定義されているため、アプリケーションがごく少数のレコードをどのように失っていたかを説明するのに迷いました。
これは、上記の代替クエリを使用し始めたときです。どちらも、アプリの読み取り/書き込みカウントとCOUNT(*)
、ターゲットから返された値に同意しました。つまり、一致しなかった唯一の値はCOUNT(*)
、ソースデータベース上のでした。