Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Access VBA在两个表中查找不匹配的记录_Vba_Ms Access_Join - Fatal编程技术网

Access VBA在两个表中查找不匹配的记录

Access VBA在两个表中查找不匹配的记录,vba,ms-access,join,Vba,Ms Access,Join,我有一个复杂的问题,我一直在努力解决。我试过用几种不同的方式写它。什么都不管用。它要么失败,要么消耗太多内存和错误 基本上,我有 Table1 -F1 -F2 -F3 -F4 -F5 -F6 -F7 -F8 Table2 -F1 -F2 -F3 -F4 -F5 我需要从表1中获取F1+F2+F3+F4+F5的连接值,并确保在表2中F1+F2+F3+F4+F5的连接值中没有与之匹配的值,其中表1.F6+Table1.F7'xxxxx'和表1.F8为空 但这就是问题所在。。。 在同一个查询中,我

我有一个复杂的问题,我一直在努力解决。我试过用几种不同的方式写它。什么都不管用。它要么失败,要么消耗太多内存和错误

基本上,我有

Table1
-F1
-F2
-F3
-F4
-F5
-F6
-F7
-F8

Table2
-F1
-F2
-F3
-F4
-F5
我需要从表1中获取F1+F2+F3+F4+F5的连接值,并确保在表2中F1+F2+F3+F4+F5的连接值中没有与之匹配的值,其中表1.F6+Table1.F7'xxxxx'和表1.F8为空

但这就是问题所在。。。 在同一个查询中,我还需要确保不仅不满足第一个条件,而且还满足另外3个条件,其中在表1的连接值中的某些位置有星号。文字星号,而不是通配符

假设我们将这5个字段连接到每个表中一个名为TEMP的列中。我需要这个:

    Table1.TEMP <> Table2.TEMP 
    AND LEFT(Table1.TEMP,8) + "**" + Right(Table1.TEMP,2) <> Table2.TEMP
    AND LEFT(Table1.TEMP,9) + "**" + Right(Table1.TEMP,1) <> Table2.TEMP
    AND LEFT(Table1.TEMP,9) + "***" <> Table2.TEMP
    WHERE Table1.F6+Table1.F7 <> "xxxxx" AND Table1.F8 is empty
我点击“run”,它在底部显示“runquery”。但40分钟后,状态栏一点也没有填满


更新2。我将其重写为SELECT语句,只使用了top join语句(删除了下面的3个语句),它生成了28k行。有没有办法使用嵌套的SQL语句在这28k语句中搜索第二条不匹配的语句,依此类推?我不太熟悉复杂的SQL语句。我想知道是否有办法打破它,而不是在JOIN语句中执行3或?我试图在联接中只添加第一个OR语句。所以在JOIN子句中有两条语句。这就杀了它。它封锁了通道。只有一个或几个。因此它无法处理JOIN子句中的OR。

您使用的实际
JOIN
子句是什么?您的
JOIN
子句应该是一个定义等式的
左外部联接
(或任何与Access SQL等价的语句);这将使连接的RHS为每个不匹配产生
NULL
结果-然后创建一个
WHERE
子句来过滤这些
NULL
值。基本上,您需要的是一个排除查询,在
UPDATE
语句下。@Mat'sMug,是的,我使用了一个左联接(这是access查询生成器在执行“不匹配”时自动使用的)join。然后检查table2.tempcolumn上的null。问题是4个独立的join子句。我在table1.temp=table2.temp或left(left(table1.temp,8)+“**”+Right(table1.temp,2)上将其设置为left join=table2.temp或…或…用于上述4个条件。我认为这不是正确的方法。它产生正确的结果,但它太慢了。必须有更好的方法。当然,它很慢,您正在连接子字符串/表达式。改为连接索引字段,如果Access不支持索引,则执行任何不需要的操作o能够加入实际字段。将实际查询包含在您的帖子中会使其在某种程度上具有可回答性…目前,我们只能猜测您正在尝试做什么。当我说“慢”时,我的意思是,我甚至不确定它是否在做任何事情。底部显示查询正在运行的状态栏从未改变。我在这里坐了一个小时,没有改变状态栏从不增加。我只处理一部分数据。临时列被索引。我将发布一个我尝试过的精确查询。我只是想知道是否有一个优于3“或”的时间在join子句上。被索引的Temp列没有任何影响,您没有使用该索引,您正在切片列的内容。您能给我们一些示例数据吗?
UPDATE TABLE1 LEFT JOIN TABLE2
ON TABLE1.TEMP = TABLE2.TEMP
OR LEFT(TABLE1.TEMP,8) + "**" + Right(TABLE1.TEMP,2) = TABLE2.TEMP
OR LEFT(TABLE1.TEMP,9) + "**" + Right(TABLE1.TEMP,1) = TABLE2.TEMP
OR LEFT(TABLE1.TEMP,9) + "***" = TABLE2.TEMP
SET TABLE1.F9 = "X"
WHERE TABLE2.TEMP IS NULL
AND TABLE1.F9 IS NULL
AND TABLE1.F7 + TABLE1.F8 = "XXXXX";