【问题标题】: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 条记录

【问题讨论】:

    标签: sql oracle datetime sql-update subquery


    【解决方案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。如果想对整体进行比较,这很好用。我还有另一种情况,我现在想比较和更新特定数字。我将脚本修改为
    猜你喜欢
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    相关资源
    最近更新 更多