SQL 如何把两个表相关联的数据一同删除

a为主表,b为子表 子表与主表的ID关联
删除了主表的数据,子表的数据没有删除
如何把两个表相关联的数据一同删除

其实你这个问题最好用数据库本身的外键解决。就是在子表建立指向父表的外键。当删除主表数据时,只要加上delete语句加上 on cascade,所有子表引用的数据就删除了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-24
删除主-从表的记录可以建立简单存储过程来实现:
CREATE PROCEDURE [存储过程]
(
@Id VARCHAR(50)
)
AS
DELETE [子表] WHERE [关联Id] = @Id
DELETE [主表] WHERE [Id] = @Id
GO

执行方法:EXECUTE [存储过程] @Id追问

存储过程是无效的

追答

怎么会呢?具体信息如何?我刚测试过了,是可以的,其中A表为主表,B表为子表,B表中的A_Id对应A表中的ID,代码如下:
CREATE PROCEDURE [Test_Pro] (@Id VARCHAR(50))
AS
DELETE [A] WHERE [Id] = @Id
DELETE [B] WHERE [A_Id] = @Id
GO
例如要删除A表B表中Id为100000的记录,执行:EXECUTE [Test_Pro] '100000'

本回答被提问者采纳
第2个回答  2012-02-03
楼上还有一种方式的。把子表的和主表关联的ID设为外键,再查看外键和主健的关系,在里面的INSERT和UPDATE规范选项里的删除规则设置为层叠,这样删除主表里的数据子数的数据也会跟着删除
第3个回答  2012-02-03
已经删除了主表的数据,那就再写一条删字表的sql:
delete from 子表 where 子表.id not in (select id from 主表);
第4个回答  2012-02-03
delete from b where id in
(select id from a where id in (*,*,*))
delect from a where id in (*,*,*)
ID必需相同
相似回答