T-SQL如何在删除父项时删除所有子项目
所以我现在处于困难的境地(对我来说至少)。我是一名新程序员,我在一家公司担任初级程序员。我有一个任务,我必须执行以下操作:T-SQL如何在删除父项时删除所有子项目
当您删除父项时,必须删除与所有关联的子任务。例如:在上面的这个表格中,如果用户删除'Parent 1',则应该删除所有的子/孙/伟大的孩子以及与该孩子相关的其他人。
因此,在这种情况下,如果用户删除 '父1'。 - 孙子5应该被自动删除 - 父母1应与少年1,少年2,儿童3,孙子女1,孙子女2,孙子女3,孙子女4.
如果用户删除少年2, 一起被删除。
我不知道如何编写一个SQL脚本来做到这一点?
有什么建议吗?我在MS SQL Server上运行此查询
首先,您需要一个hierarchical query,用于检索给定“Parent 1”的所有子行 - 这是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服务器:
这是一个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
);
演示了整个子树:http://sqlfiddle.com/#!6/9a171/1
谢谢,我会试试看看它是否有效!感谢帮助。 –
消息336,级别15,状态1,行24 “名称”附近的语法不正确。如果这是一个通用表格表达式,则需要用分号明确地终止前面的语句。 消息319,级别15,状态1,行25 关键字'with'附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或变更跟踪上下文子句,则前面的语句必须以分号结尾。 –
当我尝试查询您发布的查询时遇到此错误 –
的[PHP MySQL的删除父和子行]可能的复制(https://stackoverflow.com/questions/15747353/php-mysql-delete-parent-and-child-rows) –
对于Oracle请参阅[this](https://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php)页面。 –
只需向同事寻求帮助和辅导。 – Maritim