我在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