我有一个带有以下列的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是一个查询的值或某些东西是值得的,但我认为我的战斗已经失败,但类似的东西是不可能或几乎不可能的。 我错了吗?。
干杯
答案 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样本