使用带有更新 SQL 的子查询

Posted

技术标签:

【中文标题】使用带有更新 SQL 的子查询【英文标题】:Using subquery with update SQL 【发布时间】:2021-05-12 16:25:44 【问题描述】:

我有表 1:EMP 如下

       ID   NAME             CITY             AMT        
       -------------------------------------------
        1   sajani           Bangalore        0          
        2   Prashanth        Bangalore        0          
        3   Jayvin           Bangalore        0     

表 2:EMP1

 ID   NAME1            CITY1            AMT1    
 ---------------------------------------------
  1   Sajani           Bangalore        10      
  1   Sajani           Bangalore        10      
  2   Prashanth        Bangalore        10      
  3   Jayvin           Bangalore        10      

ID 是密钥,在两个文件中都是通用的。我想要一个 Update SQL 来使用表 2 的 Amount 字段更新表 1 的 amount 字段,结果如下。

结果:

       ID   NAME             CITY             AMT        
       --------------------------------------------
        1   sajani           Bangalore        20          
        2   Prashanth        Bangalore        10          
        3   Jayvin           Bangalore        10    

【问题讨论】:

【参考方案1】:

一种方法是相关子查询:

update emp
    set amt = (select sum(e1.amt) from emp1 e1 where e1.id = emp.id);

您可以使用以下方法检查值是否匹配:

update emp
    set amt = (select sum(e1.amt) from emp1 e1 where e1.id = emp.id);
    where amt <> (select sum(e1.amt) from emp1 e1 where e1.id = emp.id);

【讨论】:

如果我只想在不匹配的情况下更新记录怎么办 如果什么不匹配?也许你应该问一个新问题。

以上是关于使用带有更新 SQL 的子查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 更新基于两个表之间的子查询

当 SQLAlchemy 决定使用带有 .limit() 方法的子查询时?

如何在mysql中使用带有group by的子查询?

使用子查询更新语句

带有(来自)别名的 SQL 子查询

带有子查询的 SQL 更新