我正在尝试将表a中的列(rept\u ind)更新为表b中的值,其中a.id=b.id和表b中的某些条件。表b中有一些重复项,但是rept\u ind是相同的,我仍然需要该值。如何在oracle上执行此操作?任何提示都很感激谢谢!
以下代码有错误:
ORA-01427: single-row subquery returns more than one row
代码:
UPDATE A
SET REPT_IND= (
SELECT B.REPT_IND
FROM B
INNER JOIN A
ON B.ID = A.ID
where A.ID = B.ID
and B.job_type = 'P'
and B.FT_PT is not null
);
3条答案
按热度按时间n3ipq98p1#
你也可以试试
merge
声明:或者如果您不想将a.rept\u ind设置为null(如果b中没有相关行):
iibxawm42#
考虑:
没有必要这么做
join
表a
同样在子查询中-一个correlation子句就足够了。您还可以通过启用聚合来解决可能的重复,聚合保证只返回一行。你也可以用
select distinct
而不是select max(...)
在子查询中。这在某种程度上更准确,因为它确实确保了多行具有相同的属性rept_ind
(如果他们没有,那么你仍然会得到ORA-01427
错误)。kuhbmx9i3#
只需使用相关子查询。并且不要在子查询中重复表引用: