如何根据与另一个表中的值的比较来更新列
Posted
技术标签:
【中文标题】如何根据与另一个表中的值的比较来更新列【英文标题】:How to i update a column based on comparison with value from another table 【发布时间】:2019-10-25 08:27:25 【问题描述】:我编写了一个脚本来根据两个表中的值之间的比较结果更新列。当我在其他地方创建这些表的副本时,该脚本有效,但当我将其应用于实时系统时它会更新零值
我有两个表C1
和C2
。表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。如果想对整体进行比较,这很好用。我还有另一种情况,我现在想比较和更新特定数字。我将脚本修改为以上是关于如何根据与另一个表中的值的比较来更新列的主要内容,如果未能解决你的问题,请参考以下文章
如何通过将一个表中的 id 与另一个表匹配来选择和更新一个表中的记录?