SQL 更新加入 2 个表

Posted

技术标签:

【中文标题】SQL 更新加入 2 个表【英文标题】:SQL update joining 2 tables 【发布时间】:2017-08-15 19:10:17 【问题描述】:

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

【问题讨论】:

好吧,我终于有工作要做了。这就是我所拥有的: 好吧,我终于有工作要做了。这就是我所拥有的: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 中那些不匹配的行。 【参考方案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

【讨论】:

【参考方案2】:

您可以尝试使用 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)

【讨论】:

【参考方案3】:
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

如果列的总和不相等,它将使用内部连接 ​​Table2 更新 Table1.error

【讨论】:

请不要只发布代码。解释为什么它可以解决问题。【参考方案4】:

假设表 2 中的字段 [E] 永远不能为空,您可以通过在 Left Join 后搜索 Nulls 找到您的 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;

这将返回所有没有匹配表 2 记录的表 1 记录。

您可以将该查询调用到您的更新中。

【讨论】:

【参考方案5】:

我意识到这些字段不需要连接(它们在之前的代码中被连接,所以我认为这是有原因的)。所以我做了一个无与伦比的查询向导,在同一个查询中分别使用了 4 个字段。

【讨论】:

以上是关于SQL 更新加入 2 个表的主要内容,如果未能解决你的问题,请参考以下文章

加入 3 个表以更新和插入

SQL用触发器实现 2个表 数据关联,插入更新和删除?

MySQL更新2个表里面数据的命令(向大神们请教)

使用 Ajax 未更新第二个表

update 更新多个表 SQL

使用SQL的更新语句时,一次可以对几个表进行更新?