sql查询按类别删除

时间:2013-07-05 02:49:54

标签: sql sqlite

好吧,伙计们,可能不是我问题的最佳标题。所以情况就是这样 我的数据库中有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 )

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

5 个答案:

答案 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上引用的引用子表上的所有行也将被删除。

这称为级联删除。