Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在Oracle中生成连续delete语句_Sql_Database_Oracle_Hierarchical Data - Fatal编程技术网

Sql 如何在Oracle中生成连续delete语句

Sql 如何在Oracle中生成连续delete语句,sql,database,oracle,hierarchical-data,Sql,Database,Oracle,Hierarchical Data,我在Oracle中制作了一个层次结构的tablereply类型板。 但是,不同之处在于,每个值都不是直接指向上面的board_num,而是指向最终值的编号。在这些条件下创建删除查询时,如何仅删除自己的子值,包括子值本身?下面是我的代码 select rownum"RNUM", board_num"num", board_re_ref"ref", board_re_lev"lev",board_re_seq"

我在Oracle中制作了一个层次结构的tablereply类型板。 但是,不同之处在于,每个值都不是直接指向上面的board_num,而是指向最终值的编号。在这些条件下创建删除查询时,如何仅删除自己的子值,包括子值本身?下面是我的代码

select  rownum"RNUM", board_num"num", board_re_ref"ref", board_re_lev"lev",board_re_seq"seq"
from (
select *
from board
order by BOARD_RE_REF desc, BOARD_RE_SEQ asc
);
当我删除num1时,删除2,3,4,5,8 当我删除num2时,删除4 当我删除num3时,删除8 当我删除num6时,删除7


我只需要一个删除查询就可以做到这一点。

我想我终于理解了你的问题。它就像一个博客和评论区。当你删除博客时,所有的评论也应该被删除。如果你删除了一条评论,那么对该评论的回复也应该被删除

根据示例数据,此delete语句可能是您需要的语句:

删除板 董事会成员在哪里 选择board_num 从…起 选择b2。*, 根据“董事会参考说明”和“董事会顺序上一级”对订单进行调整, 按板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明,板参考说明 从…起 选择b1* 来自b1板 其中board\u re\u ref=从board\u num=&num\u del中选择board\u re\u ref 和board_re_seq>=从board_num=&num_del的board中选择board_re_seq 和 board_re_lev=从board_num=&num_del和board_num=&num_del中选择board_re_lev 或者board_re_lev>从board_num=&num_del的board中选择board_re_lev b2 其中board_re_seq=nvlprev_seq,board_re_seq-1+1 ; 但是,此语句不支持包含2行或更多级别2行的级别1行


如果重新构造表并添加外键约束,在删除父行时删除子记录,应该会更容易。

我无法遵循逻辑。请解释如何删除board_num=1,删除2,3,4,5,8。请更详细地解释逻辑,并删除不需要的额外列question@K4M“Ref”是原始文章的编号列,num 2,3,4,5,8是第1条的答案。原始文章的级别为零,答案为一加二。2号的答案是4号。第三个答案是第八个。”“Seq”是你看棋盘时参考的顺序。现在还不清楚。让我们从更简单的示例开始:删除num2,删除4。我知道当你说num2时,是num=2的那一行。4是num=4的行。请告诉我们2号的答案是如何变成4号的。@Junjie Num2是num1的注释。因为num2的ref是1。num1有0级,所以它是一个原始的帖子。Num4是num2的注释,因为Num4的lev是2,它放在num2 seq下面只是表示blog的样子,但表中没有可以使用“connect by PREVIOR语句”的列,这就是此问题的局限性。没有前面的列,只有一个删除查询。您所理解的是正确的。这是一个带有回复类型公告的Oracle实施问题。该条件不包括表示上一篇文章的父键列,而只包括ref列,ref列是顶部文章的值。无法重写该表。此外,必须仅使用一条delete查询语句(而不是过程或触发器)清除自身及其子答复。正如您所理解的,lev=0是原始文本,lev=1是原始文本的答案,lev=2是lev=1。我对使用lad的delete语句印象深刻。
    RNUM       num        ref        lev        seq
  --------- ---------- ---------- ---------- ----------
     1          6          6          0          0
     2          7          6          1          1
     3          1          1          0          0
     4          5          1          1          1
     5          3          1          1          2
     6          8          1          2          3
     7          2          1          1          4
     8          4          1          2          5