gpt4 book ai didi

sql - 删除/选择postgresql中的层次结构数据

转载 作者:行者123 更新时间:2023-11-29 13:23:53 24 4
gpt4 key购买 nike

我有表 comment,我想通过输入 id 删除并删除所有子项,

下面两个查询都没有删除所有层级数据,只删除自身和一个子行...

with 闭包中select recursive 有什么问题吗?

评论

id | parent_comment_id
1 |
2 | 1
3 | 2
4 |

查询 1

WITH RECURSIVE coH AS (
SELECT co.id,
co.id AS rootId
FROM comment co

UNION ALL

SELECT coChild.id,
coChild.parent_comment_id as parentCommentId
FROM comment coChild
JOIN coH coP ON coP.id = coChild.parent_comment_id
)
DELETE FROM comment WHERE id IN (
SELECT id FROM coH WHERE rootId = $1
)

查询 2

DELETE FROM comment WHERE id IN (
WITH RECURSIVE coH AS (
SELECT co.id,
co.id AS rootId
FROM comment co

UNION ALL

SELECT coChild.id,
coChild.parent_comment_id as parentCommentId
FROM comment coChild
JOIN coH coP ON coP.id = coChild.parent_comment_id
)

SELECT id FROM coH WHERE rootId = $1
)

更新

var dbQuery = `DELETE FROM comment WHERE id IN (
WITH RECURSIVE coH (id, parentCommentId, rootId) AS (
SELECT co.id,
co.parent_comment_id as parentCommentId,
co.id AS rootId
FROM comment co

UNION ALL

SELECT coChild.id,
coChild.parent_comment_id as parentCommentId,
coP.rootId
FROM comment coChild
JOIN coH coP ON coP.id = coChild.parent_comment_id
)

SELECT id FROM coH WHERE rootId = $1
)`;

最佳答案

保持简单,将参数放在递归的初始查询中:

with recursive cbase as (
select 1 as id -- select $1 as id

union all

select child.id
from comment as child
join cbase on cbase.id = child.parent_comment_id
)
delete from comment
where id in (select * from cbase)
returning id;

id
----
1
2
3
(3 rows)

DELETE 3

关于sql - 删除/选择postgresql中的层次结构数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37245734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com