带有分析的 Oracle 更新语句失败
Oracle update statement with analytics is failing
Table_B 包含重复记录,如下所示。我想做的是使用 Table_B.SERIAL_NUM 查找 Table_A 并更新 Table_A .COVERAGE_END 列,其中 COVERAGE_TO 列中的最新日期值 [=24] =].
Table_B
SERIAL_NUM ,COVERAGE_FROM ,COVERAGE_TO
123456 ,26/12/2014 ,13/12/2015
123456 ,14/12/2015 ,13/12/2016
23456 ,18/12/2014 ,13/12/2015
23456 ,14/12/2015 ,13/12/2016
以下是我正在使用的更新语句。
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 的 SERIAL_NUMBER 与 B 进行比较才能获得唯一正确的值。
where rn = 1 and J.SERIAL_NUMBER = SERIAL_NUM
如果不是,子查询将为每个 SERIAL_NUM return 个最大值。
我不确定为什么这里需要分区。
一个简单的 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
)
;
Table_B 包含重复记录,如下所示。我想做的是使用 Table_B.SERIAL_NUM 查找 Table_A 并更新 Table_A .COVERAGE_END 列,其中 COVERAGE_TO 列中的最新日期值 [=24] =].
Table_B
SERIAL_NUM ,COVERAGE_FROM ,COVERAGE_TO
123456 ,26/12/2014 ,13/12/2015
123456 ,14/12/2015 ,13/12/2016
23456 ,18/12/2014 ,13/12/2015
23456 ,14/12/2015 ,13/12/2016
以下是我正在使用的更新语句。
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 的 SERIAL_NUMBER 与 B 进行比较才能获得唯一正确的值。
where rn = 1 and J.SERIAL_NUMBER = SERIAL_NUM
如果不是,子查询将为每个 SERIAL_NUM return 个最大值。
我不确定为什么这里需要分区。 一个简单的 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
)
;