我在 MS Access 2010 数据库中有两个表:TBLIndividuals 和 TblIndividualsUpdates。他们有很多相同的数据,但是两个表中给定人的记录的主键可能不一样。所以我在名字和出生日期的两个表之间进行连接,以查看哪些记录对应。我正在使用左连接,这样我还可以获取 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 条新记录,但查询结果中只有 4 行 OldID 为空。
如果我将数据从 Access 导出到 PostgreSQL 并在那里运行相同的查询,我会得到所有 4149 行。
这是 Access 中的错误吗?Access的左连接语义和PostgreSQL的有区别吗?我的数据库是否已损坏(压缩和修复没有帮助)?