父表
---------
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 )
现在我只需删除该查询的结果中的所有行..:)
答案 0 :(得分:2)
这称为级联删除。设置外键时,可以指定删除子行。
有关详细信息,请参阅http://www.sqlite.org/foreignkeys.html的第4.3节。
答案 1 :(得分:1)
如果您没有设置外键,请执行此操作
DELETE parent, child
FROM parent LEFT JOIN child ON parent.id = child.parent_id
WHERE parent.id = 0
答案 2 :(得分:0)
我认为最好的方法是在删除父A时创建一个触发器 在那里你可以获得已删除的父ID和写入查询以从B中删除 类似地,在删除Parent B时创建一个触发器,并再次从已删除的行中获取id并从C
中删除所有行答案 3 :(得分:0)
Othere方式可以创建一个过程,将父A的id作为参数
现在作家查询如
从C中删除Cid in(从C中选择Cid,其中CparentID在(从B中选择B,其中BparentID = ag))
从B中删除BparentID = aid
从A中删除援助=援助
你也可以参考这个
http://msdn.microsoft.com/en-us/library/aa933119%28SQL.80%29.aspx
答案 4 :(得分: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上引用的引用子表上的所有行也将被删除。
这称为级联删除。