我在MS Access 2010数据库中有两个表:TBLIndividuals和TblIndividualsUpdates。他们有很多相同的数据,但主键可能与两个表中给定人的记录不同。所以我在名称和生日的两个表格之间进行连接,以查看哪些记录对应。我正在使用左连接,这样我也可以获得处于TblIndividualsUpdates但不在TBLIndividuals中的人员的行。通过这种方式,我知道需要将哪些记录添加到TBL个人中才能使其更新。为什么我的左连接Access的行数比左表的少?
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之间有区别吗?我的数据库是否损坏(Compact和Repair不起作用)?
可以运行'SELECT COUNT(*)FROM TblIndividualsUpdates;'告诉我们输出? – 2012-04-24 18:09:36
@ypercube结果是4149 – andybalholm 2012-04-25 23:28:13