SQL更新加入2个表

时间:2017-08-15 19:10:18

标签: sql ms-access join

在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中那些不匹配的行。

5 个答案:

答案 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个字段创建了一个不匹配的查询向导。