访问 2016 年的关系
Access 2016 Relationships
我有一个我正在尝试设计的 Access 2016 数据库。我有一个 table 和一个人名册 tblRoster,与另一个 table 的 1-1 关系,具有关于此人的基本个人数据和从该基本数据 table 到另一个 table 作为查找。我有一个有效的查询,但是当我从查找 table 添加一列时,没有显示任何数据。请帮忙看看是什么原因。
请在下面找到 SQL 查询语句:
SELECT tblRoster.EDIPI, [tblRoster].[LastName] & ", " & [tblRoster].[FirstName] & " " & Left$([tblRoster].[MiddleName],1) AS [Full Name], tblBasicIndividualRecords.PriMilOccSpec AS MOS, DLookUp("LongName","tblMilitaryOccupationalSpecialties","tblMilitaryOccupationalSpecialties!ID = " & [tblBasicIndividualRecords].[PriMilOccSpec]) AS [MOS Decription], DLookUp("Abbreviation","tblRankStructure","tblRankStructure!ID = " & [tblRoster].[Rank]) AS Rank, Format([EndOfActiveService],"yymmdd") AS EAS, tblBasicIndividualRecords.Billet, tblBasicIndividualRecords.OnHand, tblBasicIndividualRecords.Remarks, tblBasicIndividualRecords.Deployable, tblRankStructure.SortValue
FROM (tblRankStructure INNER JOIN tblRoster ON tblRankStructure.ID = tblRoster.Rank) INNER JOIN tblBasicIndividualRecords ON tblRoster.EDIPI = tblBasicIndividualRecords.EDIPI
ORDER BY tblRankStructure.SortValue DESC;
当我将查找 table 添加到查询时,没有数据填充:
SELECT tblRoster.EDIPI, [tblRoster].[LastName] & ", " & [tblRoster].[FirstName] & " " & Left$([tblRoster].[MiddleName],1) AS [Full Name], tblBasicIndividualRecords.PriMilOccSpec AS MOS, DLookUp("LongName","tblMilitaryOccupationalSpecialties","tblMilitaryOccupationalSpecialties!ID = " & [tblBasicIndividualRecords].[PriMilOccSpec]) AS [MOS Decription], DLookUp("Abbreviation","tblRankStructure","tblRankStructure!ID = " & [tblRoster].[Rank]) AS Rank, Format([EndOfActiveService],"yymmdd") AS EAS, tblBasicIndividualRecords.Billet, tblBasicIndividualRecords.OnHand, tblBasicIndividualRecords.Remarks, tblBasicIndividualRecords.Deployable, tblRankStructure.SortValue, tblMilitaryOccupationalSpecialties.SortOrder
FROM tblMilitaryOccupationalSpecialties INNER JOIN ((tblRankStructure INNER JOIN tblRoster ON tblRankStructure.ID = tblRoster.Rank) INNER JOIN tblBasicIndividualRecords ON tblRoster.EDIPI = tblBasicIndividualRecords.EDIPI) ON (tblMilitaryOccupationalSpecialties.ID = tblBasicIndividualRecords.AddMilOccSpec.Value) AND (tblMilitaryOccupationalSpecialties.ID = tblBasicIndividualRecords.PriMilOccSpec)
ORDER BY tblRankStructure.SortValue DESC;
每当您创建或更改查询但它没有按预期工作时,您可以采取几个步骤来分析问题并找到解决方案。两个最常遇到的问题是 'selection criteria' 或 'table joins'。查询越复杂,就越难发现问题。
加入问题:
如果您在添加新的 table 或加入其他字段时遇到问题,请通过仅保留新的 table 和加入的 table 来简化查询,然后进行测试。如有必要,请确保您的 table 确实包含匹配数据!如果您还添加了选择标准,则将其删除。
选择标准:
如果您的 change/add 结果没有结果或结果不正确,请通过删除所有其他选择来简化查询,然后进行测试以找出原因。如有必要,删除其他 table。
复杂查询:
有时您可能有 20 个或更多加入的 table 具有 20 个或更多选择标准。由于测试每个可能的场景太耗时,我喜欢删除一半的选择标准,然后测试。如果仍然不起作用,则删除剩余标准的一半并重复测试,直到它起作用。如果您删除了一半并且现在可以正常使用,则您知道问题出在您删除的项目上。相同的测试方法适用于连接的 tables。首先删除任何没有相关 table 的 table,然后进行测试。继续删除 tables / criteria 直到它起作用。
其他一些调试技巧:
Managing and debugging SQL queries in MS Access
我有一个我正在尝试设计的 Access 2016 数据库。我有一个 table 和一个人名册 tblRoster,与另一个 table 的 1-1 关系,具有关于此人的基本个人数据和从该基本数据 table 到另一个 table 作为查找。我有一个有效的查询,但是当我从查找 table 添加一列时,没有显示任何数据。请帮忙看看是什么原因。
请在下面找到 SQL 查询语句:
SELECT tblRoster.EDIPI, [tblRoster].[LastName] & ", " & [tblRoster].[FirstName] & " " & Left$([tblRoster].[MiddleName],1) AS [Full Name], tblBasicIndividualRecords.PriMilOccSpec AS MOS, DLookUp("LongName","tblMilitaryOccupationalSpecialties","tblMilitaryOccupationalSpecialties!ID = " & [tblBasicIndividualRecords].[PriMilOccSpec]) AS [MOS Decription], DLookUp("Abbreviation","tblRankStructure","tblRankStructure!ID = " & [tblRoster].[Rank]) AS Rank, Format([EndOfActiveService],"yymmdd") AS EAS, tblBasicIndividualRecords.Billet, tblBasicIndividualRecords.OnHand, tblBasicIndividualRecords.Remarks, tblBasicIndividualRecords.Deployable, tblRankStructure.SortValue
FROM (tblRankStructure INNER JOIN tblRoster ON tblRankStructure.ID = tblRoster.Rank) INNER JOIN tblBasicIndividualRecords ON tblRoster.EDIPI = tblBasicIndividualRecords.EDIPI
ORDER BY tblRankStructure.SortValue DESC;
当我将查找 table 添加到查询时,没有数据填充:
SELECT tblRoster.EDIPI, [tblRoster].[LastName] & ", " & [tblRoster].[FirstName] & " " & Left$([tblRoster].[MiddleName],1) AS [Full Name], tblBasicIndividualRecords.PriMilOccSpec AS MOS, DLookUp("LongName","tblMilitaryOccupationalSpecialties","tblMilitaryOccupationalSpecialties!ID = " & [tblBasicIndividualRecords].[PriMilOccSpec]) AS [MOS Decription], DLookUp("Abbreviation","tblRankStructure","tblRankStructure!ID = " & [tblRoster].[Rank]) AS Rank, Format([EndOfActiveService],"yymmdd") AS EAS, tblBasicIndividualRecords.Billet, tblBasicIndividualRecords.OnHand, tblBasicIndividualRecords.Remarks, tblBasicIndividualRecords.Deployable, tblRankStructure.SortValue, tblMilitaryOccupationalSpecialties.SortOrder
FROM tblMilitaryOccupationalSpecialties INNER JOIN ((tblRankStructure INNER JOIN tblRoster ON tblRankStructure.ID = tblRoster.Rank) INNER JOIN tblBasicIndividualRecords ON tblRoster.EDIPI = tblBasicIndividualRecords.EDIPI) ON (tblMilitaryOccupationalSpecialties.ID = tblBasicIndividualRecords.AddMilOccSpec.Value) AND (tblMilitaryOccupationalSpecialties.ID = tblBasicIndividualRecords.PriMilOccSpec)
ORDER BY tblRankStructure.SortValue DESC;
每当您创建或更改查询但它没有按预期工作时,您可以采取几个步骤来分析问题并找到解决方案。两个最常遇到的问题是 'selection criteria' 或 'table joins'。查询越复杂,就越难发现问题。
加入问题: 如果您在添加新的 table 或加入其他字段时遇到问题,请通过仅保留新的 table 和加入的 table 来简化查询,然后进行测试。如有必要,请确保您的 table 确实包含匹配数据!如果您还添加了选择标准,则将其删除。
选择标准: 如果您的 change/add 结果没有结果或结果不正确,请通过删除所有其他选择来简化查询,然后进行测试以找出原因。如有必要,删除其他 table。
复杂查询: 有时您可能有 20 个或更多加入的 table 具有 20 个或更多选择标准。由于测试每个可能的场景太耗时,我喜欢删除一半的选择标准,然后测试。如果仍然不起作用,则删除剩余标准的一半并重复测试,直到它起作用。如果您删除了一半并且现在可以正常使用,则您知道问题出在您删除的项目上。相同的测试方法适用于连接的 tables。首先删除任何没有相关 table 的 table,然后进行测试。继续删除 tables / criteria 直到它起作用。
其他一些调试技巧:
Managing and debugging SQL queries in MS Access