我需要在Access中存储一些数据。为了检查它是如何工作的,我尝试用三个表制作一个简化的结构:工人、月份、报告。在“月份”表中,我仅列出了一年中要在报告中使用的月份。在报告表中,我想存储每个工人每月制作的物品数量。所以我有关系:Reports.Worker -> Workers.ID、Reports.Month -> Months.ID。请看图片:
目标:每个工人每个月都会在报告中拥有 12 条相应的记录。我想创建“Worker1,一月”,“Worker1,二月”等报告字段,以便稍后我可以简单地添加报告,而无需手动填写“工人”和“月份”字段。
我尝试过的:
在查询设计中,我以报表为基表进行了查询。我向其他两个表添加了联接,并将联接属性设置为“从‘工人’中选择所有记录...”和“从‘月份’中选择所有记录...”。然后我添加了字段 Workers.WorkerName、Months.MonthName、Reports.Report。但是,这给了我错误“不明确的外连接”,并建议创建两个查询。
我使用 Reports 和 Workers 进行查询,并将连接属性设置为“从‘Workers’中选择所有记录...”。所以现在我确实获得了为每个工人自动创建的报告。
我的询问:
结果:
接下来,我又提出了一个查询。在那里我加入了第一个查询与月份表。再次,我将连接属性设置为“选择‘月份’中的所有记录...”。然而,这似乎覆盖了我在第一个查询中的数据。
我的询问:
结果:
如果我删除查询和表之间的联接,我确实会得到所需的结果。但它不可更新,我无法输入任何报告。
查询:
结果:
我希望我的解释足够清楚。非常感谢任何帮助!
如果您想“批量”为报告表中的每个工作人员创建一组月份记录,请使用 INSERT INTO SELECT 操作 SQL。结构将是:
INSERT INTO Reports([Month], Worker) SELECT Months.ID, Workers.ID FROM Months, Workers
为了防止月份/工人对的意外重复,请将这两个字段设置为报告表中的复合索引。
Month 是保留字。建议不要使用保留字作为任何内容的名称。更好的是 MonRep。还建议不要在多个表中使用完全相同的字段名称。将 ID 字段重命名为唯一。