【问题标题】:MS Access SQL Unequal join for 3 or more tables3个或更多表的MS Access SQL不等连接
【发布时间】:2014-11-05 23:40:06
【问题描述】:

我正在考虑改用临时表和 vba。

我想这样做。我有多个表,在这些表中可能有也可能没有具有一对多或一对一关系的项目的字段。我知道这些关系是什么(并将相应地创建多个查询)。我正在寻找的是每个其他表中都不存在的值。举个例子:

假设我们有 3 个单列表,表 1 是 {x,y,z},表 2 是 {a,x,z},表 3 是 {a,b,x,y,z},则t3 的结果将是 b (是的,我需要知道错误在哪里)。几乎,我想使用不相等的向导,但要用于 3 个或更多表。

我可能想查找某些但不是所有其他表中存在的任何项目。如果您想就此发表意见,那会很有帮助,但我认为这仅限于 vba 领域。

【问题讨论】:

  • 欢迎来到 Stack Overflow!一般来说,这里同意you shouldn't use greetings or salutations in your posts。它们妨碍了我们读者弄清楚实际问题。这次我为你编辑了它们。
  • 上次我问了一个关于数据库的问题,它被否决了,因为我没有包含示例。您可能想在此处进行更改。

标签: ms-access join multiple-tables


【解决方案1】:

我认为这里的挑战是您要解决的问题的开放性。在所有表中改变列名、表名和唯一性阈值会使其变得更加困难。按照我在下面展示的方式,我认为这不是最有效的查询方式,但相对容易编写脚本。以下代码假定表中的值在每个表中都是唯一的。

总共有 3 个查询:

qry_001_TableValues_ALL

SELECT Table1.MyValue, "Table1" AS Source
 FROM Table1

 UNION

 SELECT Table2.MyValue, "Table2" AS Source
 FROM Table2

 UNION SELECT Table3.MyValue, "Table3" AS Source
 FROM Table3;

qry_002_TableValues_Unique:

SELECT qry_001_TableValues_ALL.MyValue
FROM qry_001_TableValues_ALL
GROUP BY qry_001_TableValues_ALL.MyValue
HAVING (((Count(qry_001_TableValues_ALL.MyValue))=1));

qry_003_TableValues_UniqueWithSource:

SELECT  qry_002_TableValues_Unique.MyValue, qry_001_TableValues_ALL.Source
FROM    qry_002_TableValues_Unique INNER JOIN qry_001_TableValues_ALL
        ON qry_002_TableValues_Unique.MyValue = qry_001_TableValues_ALL.MyValue;

如果列\表发生更改,您需要编写第一个表。它正在查看所有表并从指定字段创建唯一的值列表。第二个查询针对所有计数为 1 的值(后聚合)的原始唯一值查询查找源表名称。这意味着所有涉及的表,只有一个返回值的实例,并且它再次与原始唯一值列表连接以确定源表是什么。您可以在此处编写对 HAVING 子句的更改脚本,以查看是否有 x 个表包含该值。最终查询只是您运行的查询,以便为您提供您正在寻找的值及其所在位置的最终报告。

希望这是您正在尝试做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多