SQL 分层 table 需要简化
SQL hierarchical table need to be simplified
我在使 table 更简单一点方面遇到了一些麻烦,让我解释一下:
Table 结构输入:
OLD_KEY | NEW KEY
4536 4566
4566 4977
4321 10290
5423 8920
我正在从一个来源获取数据,这会在 table 秒内改变我的 PK(序列号);之后,我需要将所有这些 table 更新为它们的新序列号。
我的问题是,数据可以像示例中那样出现,而不是简单的更新,并且对同一个旧密钥更改两次或更多次(在示例中)4536 首先更改为 4566,然后再次更改为4977.
这目前迫使我使用游标,它将按第一个键和 ETC 排序逐行更新每个 table...
以前还好,最近数据量翻了很多,这个过程很繁重,占用资源也很多。
我的问题是:我需要删除所有必须更新两次或更多次的键,只更新一次,这意味着 - 对于上面的示例,输出如下所示:
OLD_KEY | NEW_KEY
4536 4977
4321 10290
5423 8920
考虑过先验使用分层函数并从...开始,但我从哪里开始?
提前致谢。
SELECT CONNECT_BY_ROOT( old_key ) AS old_key,
new_key
FROM table_name
WHERE CONNECT_BY_ISLEAF = 1
START WITH old_key NOT IN ( SELECT new_key FROM table_name )
CONNECT BY PRIOR new_key = old_key;
我在使 table 更简单一点方面遇到了一些麻烦,让我解释一下:
Table 结构输入:
OLD_KEY | NEW KEY
4536 4566
4566 4977
4321 10290
5423 8920
我正在从一个来源获取数据,这会在 table 秒内改变我的 PK(序列号);之后,我需要将所有这些 table 更新为它们的新序列号。
我的问题是,数据可以像示例中那样出现,而不是简单的更新,并且对同一个旧密钥更改两次或更多次(在示例中)4536 首先更改为 4566,然后再次更改为4977.
这目前迫使我使用游标,它将按第一个键和 ETC 排序逐行更新每个 table...
以前还好,最近数据量翻了很多,这个过程很繁重,占用资源也很多。
我的问题是:我需要删除所有必须更新两次或更多次的键,只更新一次,这意味着 - 对于上面的示例,输出如下所示:
OLD_KEY | NEW_KEY
4536 4977
4321 10290
5423 8920
考虑过先验使用分层函数并从...开始,但我从哪里开始?
提前致谢。
SELECT CONNECT_BY_ROOT( old_key ) AS old_key,
new_key
FROM table_name
WHERE CONNECT_BY_ISLEAF = 1
START WITH old_key NOT IN ( SELECT new_key FROM table_name )
CONNECT BY PRIOR new_key = old_key;