【问题标题】:SQL hierarchical table need to be simplifiedSQL层次表需要简化
【发布时间】:2016-01-28 12:59:53
【问题描述】:

让我的表格更简单一点有点麻烦,让我解释一下:

带输入的表结构:

OLD_KEY | NEW KEY
  4536     4566
  4566     4977
  4321     10290
  5423     8920

我正在从一个来源获取数据,即在几个表中更改我的 PK(序列号);之后,我需要将所有这些表更新为新的序列号。

我的问题是,数据可以像示例中那样出现,而不是简单的更新,并且对于相同的旧键更改两次或更多次,例如(在示例中)4536 首先更改为 4566,然后再次更改为 4977。

目前这迫使我使用游标,它将按第一个键和 ETC 排序逐行更新每个表...

以前还好,但最近数据量成倍增长,使得这个过程非常繁重,占用了大量资源。

我的问题是:我需要消除所有那些必须更新两次或更多次的键,只更新一次,这意味着 - 对于上面的示例,输出如下:

OLD_KEY | NEW_KEY
  4536     4977
  4321     10290
  5423     8920

考虑过使用先验和开始的分层函数.. 但是我从哪里开始呢?

提前致谢。

【问题讨论】:

    标签: sql oracle plsql hierarchy


    【解决方案1】:
    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;
    

    【讨论】:

    • 我自己正在写它:) thx ,工作完美。
    • 您可以对同一个旧值进行多次更改吗?例如 1->2; 3->1; 1->4
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2014-08-23
    • 2011-04-01
    • 2021-04-01
    • 1970-01-01
    • 2011-08-13
    相关资源
    最近更新 更多