1
id name      parentid
 1 category     0
 2 question1    1
 3 type1        2
 4 type2        2
 5 question2    0
 6 type2        5
 7 type2        5

在哪里:

  • 类别是父级
  • question1question2是孩子
  • type1type2type3type4是孙子

我想写一个 MySQL 语句来删除所有子记录的选定父级。我怎样才能做到这一点?

4

3 回答 3

2

MySQL 不支持递归查询...

如果您有预定的深度,您可以通过一些连接来完成。

否则,您将需要在应用程序中的代码中执行此操作,或者编写存储过程/函数来执行此操作。

编辑:快速递归函数删除...

function recursiveDelete($id) {
    $result=mysql_query("SELECT * FROM yourTable WHERE parentid='$id'");
    if (mysql_num_rows($result)>0) {
         while($current=mysql_fetch_array($result)) {
              recursiveDelete($current['id']);
         }
    }
    mysql_query("DELETE FROM yourTable WHERE id='$id'");
}
于 2012-05-21T08:57:16.573 回答
0

您可以创建外键来支持这一点。

在 MySQL 中,此操作如下所示:

ALTER TABLE your_table_name ADD CONSTRAINT your_table_name_parentid_to_id
FOREIGN KEY (parentid)
REFERENCES your_table_name (id)
ON DELETE CASCADE ON UPDATE CASCADE; 

然后简单

DELETE FROM your_table_name WHERE id = 2;

将删除 question1、type1 和 type2。

但在这种情况下,请确保对于每个 parentid 值都有相同的 id 值或 parentid 为 NULL:

   id 名称 parentid
   1 个类别 NULL
   2 问题 1 1
   3型1 2
   4型2 2
   5 题2 1
   6型2 5
   7型2 5
于 2012-05-21T09:02:35.077 回答
0

connect by在 Oracle 中使用特性怎么样?

于 2013-02-01T10:10:19.643 回答