如何从彼此引用的表中删除行?

时间:2010-03-09 15:33:36

标签: sql sql-server sql-server-2005 multi-table-delete

我想这样做:

delete from table1 a,table2 b, table3  c 
 where a.col1 = b.col1 
   and b.col2 = c.col2 
   and a.co3 <> 8001;

但它给了我一个错误。

4 个答案:

答案 0 :(得分:3)

首先删除最低级别,然后从那里向上移动,每级删除一次,到最高级别:

DELETE FROM ChildTable WHERE ParentID=...

DELECT FROM ParentTable WHERE ParentID=...

答案 1 :(得分:2)

您可以启用级联删除,然后删除父记录。

答案 2 :(得分:1)

由于你没有指定每个表有外键和在哪个字段上,我会猜测:

Delete TableC
Where Exists( Select 1 From TableA Where TableA.Col1 = TableC.Col2 And TableA.Col3 <> '8001' )

Delete TableB
Where Exists( Select 1 From TableA Where TableA.Col1 = TableB.Col2 And TableA.Col3 <> '8001' )

Delete TableA
Where Col3 <> '8001'

答案 3 :(得分:0)

从table1 a,table2 b,table3 c
中删除A.  其中a.col1 = b.col1
   和b.col2 = c.col2
   和a.co3&lt;&gt; 8001;