1

好的,伙计们,这可能不是解决我问题的最佳标题。所以这是我的数据库中有2个表的情况,

父表

---------
 id name 
---------
 0   A
 1   B
 2   C

子表

-------------------------
 id   name    parent_id
-------------------------
 0   child_A    1
 1   child_B    0
 2   child_C    2

所以如果删除父表中的记录A ,我如何删除所有具有parent_id 0 (A有id 0)的孩子 ?

我希望你能理解我的问题并帮助我.. :) 感谢 adv .. :)

我想我已经找到了解决方案,首先我尝试通过这个查询获取所有不再有父级的字段

SELECT * FROM folders C where  NOT EXISTS (select * from folders as A INNER JOIN gis_folders as B on (A.parent_id = B.id) where A.id= C.id )

现在我只需要删除该查询结果中的所有行.. :)

4

5 回答 5

2

这称为级联删除。设置外键时,您可以指定删除子行。

有关详细信息,请参阅http://www.sqlite.org/foreignkeys.html的第 4.3 节。

于 2013-07-05T02:53:36.750 回答
1

如果您没有设置外键,请执行此操作

DELETE parent, child 
FROM parent LEFT JOIN child ON parent.id = child.parent_id 
WHERE parent.id = 0
于 2013-07-05T02:59:45.903 回答
0

我认为最好的方法是在删除父 A 时创建触发器,在那里您可以获得已删除的父 id 并编写查询以从 B 中删除,类似地在删除父 B 时创建触发器,然后再次从已删除的行中获取 id 并删除C中的所有行

于 2013-07-05T04:48:09.687 回答
0

其他方法可以是创建一个以父 A 的 id 作为参数的过程

现在作家查询喜欢

从 C 中删除 Cid in(从 C 中选择 Cid,其中 CparentID 在(从 B 中选择投标,其中 BparentID = 援助))

从 B 中删除 BparentID = 帮助

从 A 中删除,其中援助 = 援助

你也可以参考这个

http://msdn.microsoft.com/en-us/library/aa933119%28SQL.80%29.aspx

于 2013-07-05T05:03:22.550 回答
0
CREATE TABLE tblparent(
    id INTEGER PRIMARY KEY auto_increment,
    name VARCHAR(50)
)engine=innodb;


CREATE TABLE tblchild(
    id INTEGER PRIMARY KEY auto_increment,
    name VARCHAR(50),
    parent_id INTEGER,
    FOREIGN KEY(parent_id) REFERENCES tblparent(id) ON DELETE CASCADE
)engine=innodb;

在这种情况下,当父行被删除时,被引用的子表上在该 id 上引用的所有行也将被删除。

这称为级联删除。

于 2013-07-05T06:34:11.183 回答