2014-11-05 57 views
0

我正在考虑切换到使用临时表和vba。MS Access SQL 3个或更多表的不相等连接

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

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

我可能想要查找某些但不是所有其他表中存在的项目。如果您想就此发表意见,这将有所帮助,但我认为这是严格的vba领域。

+0

欢迎来到Stack Overflow!一般来说,这里同意[你不应该在你的帖子中使用问候或称呼](http://meta.stackoverflow.com/questions/276033/pointless-question-edit/276037#276037)。他们妨碍我们读者找出真正的问题。这次我为你编辑了它们。 – 2014-11-05 23:43:44

+0

上次我问了一个关于数据库投下的问题,因为我没有包括一个例子。你可能想在这里改变它。 – Steve 2018-03-08 23:23:57

回答

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; 

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

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