MS Access 2010データベースには、TBLIndividualsとTblIndividualsUpdatesの2つのテーブルがあります。それらには多くの同じデータがありますが、両方のテーブルの特定の人のレコードの主キーが同じでない場合があります。そのため、名前と生年月日の2つのテーブルを結合して、どちらのレコードが対応しているかを確認しています。左結合を使用しているので、TblIndividualsUpdatesにはあるが、TBLIndividualsにはない人々の行も取得します。そうすれば、最新の状態にするためにTBLIndividualsに追加する必要のあるレコードを知ることができます。
SELECT TblIndividuals.PersonID AS OldID,
TblIndividualsUpdates.PersonID AS UpdateID
FROM TblIndividualsUpdates LEFT JOIN TblIndividuals
ON ( (TblIndividuals.FirstName = TblIndividualsUpdates.FirstName)
and (TblIndividuals.LastName = TblIndividualsUpdates.LastName)
AND (TblIndividuals.DateBorn = TblIndividualsUpdates.DateBorn
or (TblIndividuals.DateBorn is null
and (TblIndividuals.MidName is null and TblIndividualsUpdates.MidName is null
or TblIndividuals.MidName = TblIndividualsUpdates.MidName))));
TblIndividualsUpdatesには4149行がありますが、クエリは4103行しか返しません。TblIndividualsUpdatesには約50の新しいレコードがありますが、OldIDがnullであるクエリ結果には4行しかありません。
AccessからPostgreSQLにデータをエクスポートし、そこで同じクエリを実行すると、4149行すべてが取得されます。
これはAccessのバグですか?Accessの左結合セマンティクスとPostgreSQLのセマンティクスに違いはありますか?データベースが破損していませんか(コンパクトと修復は役に立ちません)?