【问题标题】:Update on non-standardized hierarchy data更新非标准化层次结构数据
【发布时间】:2014-01-16 13:52:01
【问题描述】:

我有一个包含三列的表:Parent、Child 和 Flag。当子项有自己的子项时,它也会出现在父列中。

层次结构没有标准化级别,因此,一个成员的最后一个级别可以是 6,而其他成员的最后一个级别可以是 3。

例子:

1
- 1.1
-- 1.1.1
--- 1.1.1.1
- 1.2
-- 1.2.1
- 1.3
-- 1.3.1
--- 1.3.1.1
----1.3.1.1.1
2
- 2.1
-- 2.1.1
...

我需要的是更新Parent以1开头的记录的Flag,以及它的children,children的children等等......在这种情况下,只有:

1
- 1.1
-- 1.1.1
--- 1.1.1.1
- 1.2
-- 1.2.1
- 1.3
-- 1.3.1
--- 1.3.1.1
----1.3.1.1.1

但请记住,在表格中它不是这样的结构,而是在两列中,例如:

Parent    |Child
1          1.1
1          1.2
1          1.3
1.1        1.1.1
1.1.1      1.1.1.1
1.2        1.2.1
...

提前感谢大家!

【问题讨论】:

  • child like input_parent_id||'.%' 对你没有帮助吗?
  • 不,因为层次结构不是这样组织的(这只是一个示例)。实际上数据更像:(L1) CT-100000 -> (L2) CT-101022 -> (L3) CT-980009 ...

标签: sql oracle hierarchy


【解决方案1】:

如果我了解您的问题,您想按他们的第一个父母更新行。 你可以用connect_by_root 来做到这一点,看看here

基本上(还没有测试过)类似的东西

update  hierarchy_table h_outer
set     flag = 'X'
where   h_outer.rowid in (
    select rid 
    from    (
        select  h.row_id as rid , connect_by_root parent_id as root_parent
        from    hierarchy_table h
        start with parent = null 
        connect by prior child_id = parent_id
        ) 
    where root_parent like '1%'
    )

【讨论】:

    【解决方案2】:

    希望这能满足您的要求

    UPDATE hierarchy_table a
       SET a.flag = 'X'
     WHERE a.ROWID IN (SELECT b.ROWID
                         FROM hierarchy_table b
                        START WITH b.PARENT = '1' -- Change start point here
                      CONNECT BY PRIOR b.child = b.PARENT);
    

    【讨论】:

    • 我认为它正在生成笛卡尔。听说过一种叫做 NOCYCLE 的东西......也许这可以帮助......我正在设置起点,但甚至认为查询永远不会结束......
    • 只是让您知道,层次结构不像 1、1.1 ... 那样组织(这只是一个示例)。实际上数据更像:(L1) CT-100000 -> (L2) CT-101022 -> (L3) CT-980009 ...
    • 除非存在父子关系,否则数据是什么并不重要。这个查询在 Oracle 11.0.0.1.0 中非常适合我。此外,它的解释计划没有显示任何笛卡尔坐标。但这无论如何都是一个好点,最好提供别名。如果在某个时间点,父母有一个孩子是前父母,而您的示例没有证明这一点,则需要 NOCYCLE。
    猜你喜欢
    • 2017-09-06
    • 2014-01-30
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多