Access 2010 Web数据库中UNION查询的替代方法

时间:2013-05-27 17:00:49

标签: ms-access-2010 parent-child union

我需要将多个父类型中的一个分配给单个子项。我遇到的问题是,在Access 2010 Web数据库中,我无法创建Union查询以将所有潜在父项(来自多个表)放入单个下拉/列表框中。

我对这一切都有点绿,可能会完全错误。我对建议很开放。这是我的例子:

  • 合同是分包合同的父母。
  • 合同和分包合同都有工作声明(SoW)。
    • 合同和分包合同都可以是SoW的直接父母。
  • 每个SoW只有一个父母
    • SoWs分为段落(不过分重要)

使用union查询,我会以这种方式构建数据库:

  • 合同表
  • 转包表
  • 合同和分包合同联盟表
  • 从SoW表中查找联合表,以便从单个数据源中选择合同或转包作为父级。

这里的问题是我无法在Web数据库中创建联合查询。

我唯一的另一个想法是以这种方式构建数据库:

  • 合同表
  • 转包表
  • 合同SoW表
  • 转包SoW表

此设计(使用两个表)可能更有效地用于数据输入,因为在尝试使用联合表时可能存在子表单问题。我不确定,因为我还没有尝试过。使用此方法,Access报告应该能够将转包绑定到父合同,并在详细信息部分中显示所有数据。但是,这种设计仍然意味着我将使用两个单独的表来存放相同的数据。

1 个答案:

答案 0 :(得分:0)

我会把两个合约表放在一个表中,看起来像这样:

CREATE TABLE ContractTable(
  ContactID INTEGER NOT NULL PRIMARY KEY, -- Possibly an autonumber
  [various contract columns],
  ParentContract INTEGER
);

注意,我知道这不是Access友好语法。我通常使用更大的数据库,但你应该能够理解。

然后,查找父合同的查询为SELECT ... FROM ContractTable WHERE ParentContract IS NULL

查找子合约SELECT ... FROM ContractTable WHERE ParentContract IS NOT NULL

我对这种方法的关注是,如果你需要搜索契约链(即D的C父代的B父代的父代,你需要从A到D),你可能会遇到递归SQL我不认为Access可以处理。你必须要做VBA代码。