【问题标题】:SQL update joining 2 tablesSQL 更新加入 2 个表
【发布时间】: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 中那些不匹配的行。

标签: sql ms-access join


【解决方案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 个字段。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-23
          • 2019-01-01
          • 2019-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多