使用查询或类似的SQL LIKE / CONTAINS多值

时间:2015-12-16 15:22:12

标签: sql oracle

我有一个带有以下列的oracle DB:

  ID   / ARTICLE_ID / USER_ID   / PARENT  / HIERARCHY   
  100  / 41513151   / 99        / 0       / 100
  200  / 12151351   / 101       / 100     / 100|200
  300  / 12414144   / 130       / 200     / 100|200|300 

这表示用户99的评论(id 100),其中用户101对他的评论的回复,并且同时该最后评论具有用户130的回复。图形地。

你好用户99 --->你好用户101,这是我对用户99的回复 --------你好用户130,这是我对用户101的回复

所以在我的数据库中,id为300的评论是他的父母是评论200,而他父母的最后一个是评论100. HIERARCHY(100 < - 200 < - 300)。

在删除用户后,我执行了以下查询以删除注释和子注释。

  DELETE FROM TABLE_NAME
        WHERE (USER_ID = ? AND STATUS IN (1,2)) OR ID in (SELECT A.ID 
        FROM "TABLE_NAME A INNER JOIN TABLE_NAME B 
        ON A.PARENT = B.ID 
        WHERE A.STATUS IN (1,2) AND B.USER_ID=?)

此查询适用于每个评论只有答复,但它存在N个回复每个评论(我的情况),这不起作用。

我想使用HIERARCHY来了解评论与删除的用户的评论有关,考虑到最后的想法。

如果我构建一个查询: 选择ID 来自TABLE_NAME HIERARCHY LIKE&#39;%X%&#39;

如果X是一个查询的值或某些东西是值得的,但我认为我的战斗已经失败,但类似的东西是不可能或几乎不可能的。 我错了吗?。

干杯

1 个答案:

答案 0 :(得分:1)

您是否尝试过不使用hierarchy的递归查询? 我认为它应该非常快。

  delete  TABLE_NAME where id  in (
   with tree ( child)
   as 
   ( select 
            id          
     from  TABLE_NAME where user_id = 99
    union all
     select  
       c.id
     from  tree t 
      join TABLE_NAME c 
      on c.parent = t.child )
   select child from tree 
  )

我添加了SQL Fiddle样本