Oracle 更新语句无法正常工作
Posted
技术标签:
【中文标题】Oracle 更新语句无法正常工作【英文标题】:Oracle Update statement not working correctly 【发布时间】:2020-06-26 11:37:28 【问题描述】:我想考虑每个字段值 OID
和 EXID
的组合,取最小值 LATEST_MODIFICATION_DATE
并在 FIRST_INSERTION_DATE
中更新相同的值。
我有很多冗余行,字段值 OID
和 EXID
的组合。但是为所有这些值设置最小 LATEST_MODIFICATION_DATE
日期应该没有问题。
我尝试了以下查询,但它无法正常工作:
update O_TEST t
set FIRST_INSERTION_DATE = (select min (LATEST_MODIFICATION_DATE) from O_TEST)
where rowid < (
select max(rowid)
from OBS_ORDER_ID_MAPPING_TEST t2
where t.EXID = t2.EXID
and t.OID = t2.OID
);
【问题讨论】:
【参考方案1】:您需要set
的相关子查询:
update O_TEST t
set FIRST_INSERTION_DATE = (select min(t2.LATEST_MODIFICATION_DATE)
from O_TEST t2
where t2.EXID = t.EXID and t2.OID = t.OID
)
where LATEST_MODIFICATION_DATE <> (select min(t2.LATEST_MODIFICATION_DATE)
from O_TEST t2
where (t2.EXID = t.EXID or t2.EXID is null and t.EXID is null) and
t2.OID = t.OID
);
要处理 NULL
值,您需要在相关子查询中考虑这些值:
update O_TEST t
set FIRST_INSERTION_DATE = (select min(t2.LATEST_MODIFICATION_DATE)
from O_TEST t2
where t2.EXID = t.EXID and
t2.OID = t.OID ) 其中 LATEST_MODIFICATION_DATE (选择分钟(t2.LATEST_MODIFICATION_DATE) 从 O_TEST t2 其中(t2.EXID = t.EXID 或 t2.EXID 为空且 t.EXID 为空)和 t2.OID = t.OID );
根据您的评论,OID
不是 NULL
,但如果是这样,您也可以使用类似的逻辑。
【讨论】:
它工作正常,但我也有 EXID,它对于 OID 为空,在这种情况下,日期尚未更新 我们如何考虑这些值的组合?以上是关于Oracle 更新语句无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章