在MS Access中,我试图根据不匹配另一个表中列的串联的列的串联来更新1个表。这是我需要做的。
If ((Table1.A + Table1.B + Table1.C + Table1.D)
NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H))
Then set Table1.error = x
我知道这是某种类型的SQL连接,但我正在努力解决它。
更新: 好的,我终于有了一些工作要做。这就是我所拥有的:
SELECT [Table1].[A] & [Table1].[B] & [Table1].[C] & [Table1].[D] AS Expr1
FROM Table1, Table2
WHERE ((([Table2].[E] & [Table2].[F] & [Table2].[G] & [Table2].[H])<>
[Table1].[A] & [Table1].[B] & [Table1].[C] & [Table1].[D]));
那会跑,但它会向我展示每一条无与伦比的路线。我需要在表1中搜索表2中不存在的任何行,并且只返回表1中那些不匹配的行。
答案 0 :(得分:1)
UPDATE (SELECT Table1.error
FROM Table1,
Table2
WHERE ((Table1.A + Table1.B + Table1.C + Table1.D)
NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H)))
SET Table1.error = x
答案 1 :(得分:1)
您可以尝试与&lt;&gt;的on子句进行更新联接结果
update T
set t.error = x
FROM Table1 AS T
INNER JOIN (
SELECT Table2.E + Table2.F + Table2.G + Table2.H as T2_RESULT
from Table2
) AS ON T2.T2_RESULT <> (Table1.A + Table1.B + Table1.C + Table1.D)
答案 2 :(得分:0)
UPDATE Table1 AS T1
INNER JOIN Table2 AS T2
ON (Table1.A + Table1.B + Table1.C + Table1.D) NOT EQUAL TO (Table2.E + Table2.F + Table2.G + Table2.H))
set T1.error = x
如果列的总和不相等,它将使用内部联接Table1.error
更新Table2
。
答案 3 :(得分:0)
假设表2中的字段[E]永远不能为空,您可以通过在左连接后搜索Null来找到您的UNMATCHED表1记录:
SELECT [T1].[A] & [T1].[B] & [T1].[C] & [T1].[D] AS Concat1
FROM
[Table1] as T1
Left Join [Table2] as T2 ON
((([T2].[E] & [T2].[F] & [T2].[G] & [T2].[H]) = [T1].[A] & [T1].[B] & [T1].[C] & [T1].[D]))
WHERE
[T2].[E] is NULL;
这将返回所有表1中没有匹配的表2记录的记录。
您可以将该查询调用到您的更新中。
答案 4 :(得分:0)
我意识到这些字段并不需要连接(它们在之前的代码中连接在一起,所以我认为这是有原因的)。所以我在同一查询中分别使用4个字段创建了一个不匹配的查询向导。