Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有分析功能的Oracle update语句失败_Oracle_Sql Update_Window Functions - Fatal编程技术网

具有分析功能的Oracle 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(

表_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() 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序列号是唯一的值。我不是甲骨文方面的专家,如果你能告诉我如何以你的方式实现同样的目标,我会尝试一下。