具有分析功能的Oracle update语句失败
表_B包含重复记录,如下所示。我尝试使用Table_B.SERIAL_NUM查找Table_A,并使用COVERAGE_中的最新日期值将Table_.COVERAGE_END column更新为Table_B中的column 表B 下面是我正在使用的update语句具有分析功能的Oracle update语句失败,oracle,sql-update,window-functions,Oracle,Sql Update,Window Functions,表_B包含重复记录,如下所示。我尝试使用Table_B.SERIAL_NUM查找Table_A,并使用COVERAGE_中的最新日期值将Table_.COVERAGE_END column更新为Table_B中的column 表B 下面是我正在使用的update语句 update Table_A J set ( J.COVERAGE_END_DATE) =(select COVERAGE_TO from ( select SERIAL_NUM, COVERAGE_TO, row_number(
update Table_A J
set ( J.COVERAGE_END_DATE)
=(select COVERAGE_TO from
(
select SERIAL_NUM, COVERAGE_TO, row_number() over(partition by SERIAL_NUM order by COVERAGE_TO desc) as rn from TABLE_B B
)where rn = 1
)
where exists
(
select * from TABLE_B Q where Q.SERIAL_NUM = J.SERIAL_NUMBER
)
;
但是,我得到以下错误
ORA-01427: single-row subquery returns more than one row
有人能帮我查询一下吗?你必须比较J的序列号和B的序列号,才能得到唯一正确的值
where rn = 1 and J.SERIAL_NUMBER = SERIAL_NUM
否则,子查询将返回每个序列号的最大值。您必须将J的序列号与B的序列号进行比较,以获得唯一正确的值
where rn = 1 and J.SERIAL_NUMBER = SERIAL_NUM
如果不是,子查询将返回每个序列号的最大值。我不确定这里为什么需要分区。 简单的MAX()是否不能产生所需的结果
update table_a
set coverage_end_date = (
select max(coverage_to)
from table_b b inner join table_a a on b.serial_num = a.serial_num
)
;
我不知道为什么这里需要分区。 简单的MAX()是否不能产生所需的结果
update table_a
set coverage_end_date = (
select max(coverage_to)
from table_b b inner join table_a a on b.serial_num = a.serial_num
)
;
为什么要在B上分区(这需要一个顶部(1))?为什么不直接从B获得max(覆盖率?到)?正如您可以看到序列号在表B中重复。因此,对于特定序列号,我需要表B中的最新日期。然后我需要用该日期更新表a。表As序列号是唯一的值。我不是Oracle方面的专家,如果你能告诉我如何以你的方式实现同样的目标,我会尝试一下。为什么要在B上分区(这需要一个top(1))?为什么不直接从B获得max(覆盖率?到)?正如您可以看到序列号在表B中重复。因此,对于特定序列号,我需要表B中的最新日期。然后我需要用该日期更新表a。表As序列号是唯一的值。我不是甲骨文方面的专家,如果你能告诉我如何以你的方式实现同样的目标,我会尝试一下。