【问题标题】:Alternatives to a UNION query in Access 2010 Web DatabaseAccess 2010 Web 数据库中 UNION 查询的替代方法
【发布时间】:2016-01-31 02:20:58
【问题描述】:

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

我对这一切有点陌生,可能会完全错误。我非常愿意接受建议。这是我的例子:

  • Contracts 是 Subcontracts 的父级。
  • 合同和分包合同都有工作说明书 (SoW)。
    • 合同和分包合同都可以是 SoW 的直接父级。
  • 每个母猪只有一个父节点
    • SoW 被分成几段(不太重要)

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

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

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

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

  • 合同表
  • 分包表
  • 合同 SoW 表
  • 分包 SoW 表

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

【问题讨论】:

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


    【解决方案1】:

    我会将两个合同表放在一个表中,如下所示:

    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 代码。

    【讨论】:

    • Yarr 和 Web 数据库无法编写 VBA 代码……哈哈。真是个兔子洞。我相信只会有“B的A父母”。 “ParentContract”字段是否会引用它所在表中的 ContractID 值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多