MS Access SQL对3个或更多表的不等连接

时间:2014-11-05 23:40:07

标签: ms-access join multiple-tables

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

共有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;

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

希望这是你想要做的事情。