如何根据 MS Access 中的另外两个表自动填充一个表中的字段?

问题描述 投票:0回答:1

我需要在Access中存储一些数据。为了检查它是如何工作的,我尝试用三个表制作一个简化的结构:工人、月份、报告。在“月份”表中,我仅列出了一年中要在报告中使用的月份。在报告表中,我想存储每个工人每月制作的物品数量。所以我有关系:Reports.Worker -> Workers.ID、Reports.Month -> Months.ID。请看图片:

目标:每个工人每个月都会在报告中拥有 12 条相应的记录。我想创建“Worker1,一月”,“Worker1,二月”等报告字段,以便稍后我可以简单地添加报告,而无需手动填写“工人”和“月份”字段。

我尝试过的:

  1. 在查询设计中,我以报表为基表进行了查询。我向其他两个表添加了联接,并将联接属性设置为“从‘工人’中选择所有记录...”和“从‘月份’中选择所有记录...”。然后我添加了字段 Workers.WorkerName、Months.MonthName、Reports.Report。但是,这给了我错误“不明确的外连接”,并建议创建两个查询。

  2. 我使用 Reports 和 Workers 进行查询,并将连接属性设置为“从‘Workers’中选择所有记录...”。所以现在我确实获得了为每个工人自动创建的报告。

我的询问:

结果:

接下来,我又提出了一个查询。在那里我加入了第一个查询与月份表。再次,我将连接属性设置为“选择‘月份’中的所有记录...”。然而,这似乎覆盖了我在第一个查询中的数据。

我的询问:

结果:

如果我删除查询和表之间的联接,我确实会得到所需的结果。但它不可更新,我无法输入任何报告。

查询:

结果:

我希望我的解释足够清楚。非常感谢任何帮助!

sql ms-access relational-database
1个回答
0
投票

如果您想“批量”为报告表中的每个工作人员创建一组月份记录,请使用 INSERT INTO SELECT 操作 SQL。结构将是:

INSERT INTO Reports([Month], Worker) SELECT Months.ID, Workers.ID FROM Months, Workers

为了防止月份/工人对的意外重复,请将这两个字段设置为报告表中的复合索引。

Month 是保留字。建议不要使用保留字作为任何内容的名称。更好的是 MonRep。还建议不要在多个表中使用完全相同的字段名称。将 ID 字段重命名为唯一。

© www.soinside.com 2019 - 2024. All rights reserved.