MS-Access 2003:如何组合依赖于不同表的查询条件

时间:2012-04-05 22:15:57

标签: ms-access

我希望这一主题不会过于混乱。

所以我有一个查询,根据设计师的经理从表格(设计时间)中选择数据。经理编号由表格收集。我正在使用查询设计器,此列包含:

Field: Managers_ID: ID, 
Table: Managers
Criteria: [Forms]![SelectManagerAndDateRange]![ManagerNumber]

Managers表以“ID”作为唯一标识符。

此查询中唯一的缺陷是它不包括经理自己所做的任何设计时间。在查询设计视图中,我可以为要添加的其他记录添加第二个标准吗?我知道如何进一步过滤结果,但在这种情况下我想添加更多。我可以在Managers表中查找有问题的Manager的PersonID,但后来我查找了所有记录,其中Person = Design Hours表中的personID。

我正在使用Access 2003.是的,我知道。我们计划在今年晚些时候升级到2010年。数据保存为MDB。

非常感谢任何帮助。

编辑:按要求进行screencap Relationships and criteria as mentioned in question. Circled criterion is not working as desired.

2 个答案:

答案 0 :(得分:1)

可能对您有帮助的一般答案:如果两个查询的返回具有相同数量的字段,则最简单的方法是使用union语句。

[SQL查询1]

UNION

[SQL查询2]

[按陈述排序]

请注意,使用Union时,只要您具有与第一个查询相同的数量且第二个查询中的字段名称相同,则第二个查询中的字段名称无关紧要。订购时,请使用第一个查询中的字段名称。

答案 1 :(得分:0)

UNION 查询旨在用于从不同的表中检索数据但具有相同结构的数据时使用。

在您的情况下,我认为最佳解决方案是 JOIN 查询,例如

SELECT M.field1, M.field2, M.field3, H.field1, H.field2 ...whatever fields you need
FROM Managers as M
LEFT OUTER JOIN [Design Hours Table] as H
  ON H.Person = M.PersonID
ORDER BY ... whatever order you want

您可以将此查询用作报告的 RowSource ,告诉Access按管理员表格中的所有字段对结果进行分组。

但如果您将其用于表单,则可以使用表单/子表单组合。

您将原始查询设置为表单的 RowSource ,并使用所有需要的字段和标签对其进行设计。然后插入 SubForm

Adding a Subform

告诉Access使用现有的表或查询子表单数据,然后选择 Design Hours 表,并选择在 Managers中为每条记录显示设计时间内的记录使用字段 PersonID

现在,还有另一个我想评论的问题: Managers 表中有 PersonID 字段,这是正确的,因为经理是A 人您的设计中的错误是Managers表中存在 FirstName LastName 列(除非它实际上不是表,而是查询)。原因是 PersonID 定义了一组属性,其中包含 FirstName LastName 。因此,根据您的设计,最终可能会有一位经理 PersonID = 2013, FirstName = John, LastName = O'Connor和人员表中的ID 2013引用 FirstName = Peter, LastName =卖家,这将是一个不一致。

此外,您不需要此表中的ID,因为字段PersonID最适合用作此表的PK。

您从People表中检索Name和SurName,因此连接类似于

SELECT M.field1, M.field2, M.field3, P.FirstName, P.LastName, H.field1, H.field2 ...whatever fields you need
FROM (Managers as M
INNER JOIN People as P ON P.ID = M.PersonID)
LEFT OUTER JOIN [Design Hours Table] as H
  ON H.Person = M.PersonID
ORDER BY ... whatever order you want

此致