sql – 为什么我的左连接在Access中的行数少于左表?

我在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为null.

如果我将数据从Access导出到PostgreSQL并在那里运行相同的查询,我得到所有4149行.

这是Access中的错误吗? Access的左连接语义和PostgreSQL之间有区别吗?我的数据库是否已损坏(Compact和Repair没有帮助)?

这绝不应该发生.除非在此期间插入/删除行,否则

查询:

SELECT *
FROM a LEFT JOIN b
         ON whatever ;

永远不应该返回少于:

SELECT *
FROM a ;

如果它发生,这是一个错误.你确定查询是这样的(并且你没有省略一些细节,比如WHERE子句)?你确定第一行返回4149行,第二行返回4103行吗?您可以通过将*更改为COUNT(*)来进行另一项检查.

相关文章
相关标签/搜索