所以我现在处于困境(至少对我而言)。我是一名新的程序员,我在一家公司担任初级程序员。我有一项任务,我必须做以下事情:
删除父项时,必须删除关联的所有子任务。例如:在上表中,如果用户删除“父1”,则应删除所有子/孙子/曾孙子以及与该子女相关联的所有其他人。
因此,在这种情况下,如果用户删除“父1”。 - 父母1应与孩子1,孩子2,孩子3,GrandChild 1,GrandChild 2,GrandChild 3,GrandChild 4一起删除。
如果用户删除了Child 2, - 应自动删除孙子5。
我不确定如何编写一个可以执行此操作的SQL脚本?
有什么建议吗?我在MS SQL Server上运行此查询
答案 0 :(得分:0)
首先,您需要一个hierarchical query来检索给定"父1和#34;的所有子行。 - 这是Oracle数据库的版本:。
SELECT *
FROM table
START WITH name = 'Parent 1'
CONNECT WITH PRIOR item_no = parent_item_no
现在任务变得简单了:
DELETE FROM table
WHERE ItemNo IN (
SELECT ItemNo
FROM table
START WITH name = 'Parent 1'
CONNECT WITH PRIOR item_no = parent_item_no
)
SQL-Server的一个版本:
这是一个reqursive查询,它提供Parent 1
- >的所有后代。 Demo
WITH q AS(
SELECT item_no, parent_item_no, name
FROM t
WHERE name = 'Parent 1'
UNION ALL
SELECT t.item_no, t.parent_item_no, t.name
FROM t
JOIN q
ON t.parent_item_no = q.item_no
)
SELECT * FROM q;
此DELETE语句使用上述查询删除Parent 1
WITH q AS(
SELECT item_no, parent_item_no, name
FROM t
WHERE name = 'Parent 1'
UNION ALL
SELECT t.item_no, t.parent_item_no, t.name
FROM t
JOIN q
ON t.parent_item_no = q.item_no
)
DELETE FROM t WHERE item_no IN (
SELECT item_no FROM q
);