我有表request_num,Customer id,....有几条记录的客户ID没有更新。所以我想获得相同请求数的Customer ID,并更新Customer id为null / blank的记录。如果以下内容适用于oracle,请告知我们
\
我想更新请求号的客户ID,该客户ID是来自具有相同请求数的其他记录的空值。谢谢
答案 0 :(得分:3)
使用子查询:
UPDATE CUST_VW C
SET CUST_ID = (SELECT MAX(C2.CUST_ID)
FROM CUST_VW C2
WHERE C.REQUEST_NUM = C2.REQUEST_NUM AND
C2.CUST_ID IS NOT NULL
)
WHERE CUST_ID IS NULL ;
_VW
强烈建议你有一个可能无法更新的视图。您应该真正更新基础表而不是视图。
答案 1 :(得分:-2)
您使用的是哪个版本的Oracle?始终包含该信息 - 通常是相关的。在这种情况下:可用于解决此问题的选项取决于您的版本。
在Oracle 12.1及更高版本中,您可以通过联接更新"到聚合查询。
update ( select a.cust_id, b.cust_id as new_id
from a join ( select request_num, max(cust_id) as new_id
from a
group by request_num
) b
on a.request_num = b.request_num
)
set cust_id = new_id
where cust_id is null and new_id is not null
;
在早期版本中,您可以使用merge
语句:
merge into a
using ( select request_num, max(cust_id) as new_id
from a
group by request_num
) b
on (a.request_num = b.request_num)
when matched then update a.cust_id = b.new_id
where a.cust_id is null and b.new_id is not null
;
在这两个解决方案中,a
是您当前表的名称。 b
是聚合子查询的名称 - 解决方案中定义了名称b
,但您需要将a
替换为您的实际表名。