oracle - 一张表上的分层多重更新查询 - oracle
问题描述
我有一个表人,这些列相互依赖。
person_id, related_person_id, beginner_related_person_id
我的数据示例
person_id related_person_id beginner_related_person_id
1 null null
2 1 null
3 2 null
4 null null
5 4 null
6 null null
此列beginner_related_person_id 是新的,现在为空。
我必须使用 person_id 中的值更新这一行,但要使用根 person_id。
person_id related_person_id beginner_related_person_id
1 null null
2 1 1
3 2 1
4 null null
5 4 4
6 null null
我已经开始编写查询,但需要提示。
update person
set beginner_related_person_id = person_id
where person_id in (select distinct person_id from person start with related_person_id in (select person_id from person)
connect by prior beginner_person_id = person_id);
我应该使用循环吗?或者是其他东西?
解决方案
您可以使用MERGE
语句很容易地做到这一点。
merge into person using (
select person_id,
related_person_id,
nullif(connect_by_root person_id, person_id) new_beginner_related_id
from person
start with
related_person_id is null
connect by
related_person_id = prior person_id ) u
on ( t.person_id = u.person_id )
when matched then
update set
t.beginner_related_person_id = u.new_beginner_related_id;
推荐阅读
- python - 关于 ruamel.* pypi 包的标签“ruamel”来自哪里?
- typescript - Typescript typeguard 意外行为
- python - extracting characters from python string using variable index
- powerbi - 合并过滤器和测量?
- sql - SQL Server 2016 - 过去四个星期的动态日期(周六到周五)
- .net - MSVS 2019 发布带有随机 JS 文件名的 angular asp.net mvc 核心站点
- c# - WinSCP .NET 库 FTP 传输失败,并显示“控制和数据连接的 IP 地址不匹配”
- macos - 从 WSL2 到远程机器的 x11 转发
- apache - 如何使用 .htaccess 将重定向子目录组合到根目录并同时删除 HTML 扩展名?
- php - file_upload 不适用于某些图像。挂起然后 504