首页 > 解决方案 > SQL update 语句根据日期更新可能的多行

问题描述

我正在尝试使用表 B 更新表 A 中的值,基于每个表匹配的日期,下面的示例数据。

Table A                  
Date    Value            
May-21   0
Jun-21   0
July-21  0

 TABLE B
Date    Value            
May-21  8
Jun-21   6
July-21  7

日期是动态的,并且会随着时间而变化。有没有办法创建一个更新语句,它使用基于表 B 的值更新表 A,其中有多个日期会随时间变化。

我一直在 where 子句中对日期进行硬编码,但是这种方法我需要手动更新日期并有多个更新语句,其中每个日期都有一个语句。

有谁知道这是否可以通过单个更新语句来实现,或者在不硬编码日期的情况下更新语句。我会尝试使用合并语句,但真实表包含来自大量来源的数据,因此理想情况下需要更新语句作为更用户友好的解决方案。

期望的结果:

 TABLE A
Date    Value            
May-21  8
Jun-21   6
July-21  7

标签: sql

解决方案


在标准 SQL 中,您可以将其表示为:

update a
    set value = (select b.value from b where b.date = a.date)
    where exists (select 1 from b where b.date = a.date);

许多数据库支持 s 中某种类型的连接update。但是,确切的语法取决于数据库。


推荐阅读