如何根据与另一个表中的值的比较来更新列

Posted

技术标签:

【中文标题】如何根据与另一个表中的值的比较来更新列【英文标题】:How to i update a column based on comparison with value from another table 【发布时间】:2019-10-25 08:27:25 【问题描述】:

我编写了一个脚本来根据两个表中的值之间的比较结果更新列。当我在其他地方创建这些表的副本时,该脚本有效,但当我将其应用于实时系统时它会更新零值

我有两个表C1C2。表C2 有一些列,包括一个名为EXIT_DATE 的列,我需要将其与表C1 中名为RECEIPTDATE 的列进行比较,其中MEMBER_NUMBERS匹配且EXIT_DATE 大于RECEIPTDATE。当满足条件时,我需要将表C1 中的列USED 设置为Y

UPDATE  SS_CONTRIBUTIONS c1
set C1.USED = 'Y'
 where SCHEME_ID = 1 and rowid <
     (
      select max(rowid)
        from SS_BENEFIT c2
       where c2.MEMBERID= c1.MEMBER_ID
       and c2.EXIT_DATE > c1.RECEIPTDATE
       );commit;

我希望更新 350000 条记录,但它更新了 0 条记录

【问题讨论】:

【参考方案1】:

我会在这里使用rowid 来提倡反对。这个伪列表示行的地址(对象编号、数据块、...),我看不出它对您要完成的工作有什么用处。

我认为相关子查询应该适合您的用例:

update ss_contributions c1 
set c1.used = 'Y' 
where 
    c1.scheme_id = 1
    and c1.receiptdate < (
        select max(c2.exit_date)
        from ss_benefit c2 
        where c2.memberid= c1.member_id
    );

【讨论】:

你忘了SCHEME_ID = 1 也是你的and 运营商:) @GMB 。 . . rowid 是错误的。比较单个表中的行时(有时)是有意义的。跨表比较没有意义。 Thanx。如果想对整体进行比较,这很好用。我还有另一种情况,我现在想比较和更新特定数字。我将脚本修改为

以上是关于如何根据与另一个表中的值的比较来更新列的主要内容,如果未能解决你的问题,请参考以下文章

如果任何列与另一个表中的匹配行不同,如何插入行

TSQL - 如何在插入之前根据不同列中的值检查值?

如何通过将一个表中的 id 与另一个表匹配来选择和更新一个表中的记录?

将一个表的列中的数据与另一个表中的同一列进行比较

ms sql server字符串与另一个具有多个值的字符串进行比较

将主表与另一个表中的所有记录进行比较,以得出主表的列值