首先,您需要一个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
的[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