首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

delete话语支持多表删除么

2012-12-16 
delete语句支持多表删除么?像这样delete from t1 as a (select name,guid from t2 )where a.guidb.guid就

delete语句支持多表删除么?
像这样delete from t1 as a (select name,guid from t2 )where a.guid=b.guid

就是我先查出的结果集是两个表里的,我想删除这个结果集里的数据。
[最优解释]
不支持,可以多个语句删除,或者在一个表增加触发器删除另一个表。

[其他解释]

declare @T table( guid UNIQUEIDENTIFIER)
delete a
OUTPUT deleted.guid
into @T
from t1 as a ,(select name,guid from t2 ) as b 
where a.guid=b.guid

delete t2 where guid in(select guid from @T)


SQL2005以上用output
[其他解释]
也可以考虑级联删除
/*
标题:两表通过字段关联进行级联删除。
作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开) 
时间:2008-11-20
地点:广东深圳
*/

create table ta(id int not null)
create table tb(id int , aid int)
insert into ta values(1)
insert into ta values(2)
insert into tb values(1 , 1)
insert into tb values(2 , 2)
insert into tb values(3 , 1)
go

--一、查看原始数据
--ta表的原始数据
select * from ta
/*
id          
----------- 
1
2
*/
--tb表的原始数据
select * from tb
/*
id          aid         
----------- ----------- 
1           1
2           2
3           1
*/

--二、看看没有创建级联删除时的情况(删除ta表id=1的数据,看看是否影响tb表)
delete from ta where id = 1
select * from ta
/*
id          
----------- 
2
*/
select * from tb
/*
id          aid         
----------- ----------- 
1           1
2           2
3           1
*/

--三、恢复原始数据,创建级联删除,删除ta表id=1的数据,看看是否影响tb表
insert into ta values(1)
--为ta创建主健
alter table ta add constraint pk_ta_id primary key (id)
go
--为tb创建外健,并指定级联删除
alter table tb add constraint fk_tb_aid foreign key (aid) references ta(id) on delete cascade
go
delete from ta where id = 1
select * from ta
/*
id          
----------- 
2
*/
select * from tb
/*
id          aid         
----------- ----------- 
2           2
*/

--删除级联约束
alter table tb drop constraint fk_tb_aid
go
--删除测试表
drop table ta , tb
go

------其他解决方案--------------------


就语句来说 一次只能删除一个表的

或者用临时表  


也可以用触发器来解决一次删除多个表的记录
[其他解释]
可以,SQL2000用臨時表輔助
[其他解释]

引用:
像这样delete from t1 as a (select name,guid from t2 )where a.guid=b.guid

就是我先查出的结果集是两个表里的,我想删除这个结果集里的数据。

你的意思是想同时删除多个表的数据?
你可以考虑将语句写到存储过程中,然后执行这个存储过程.
[其他解释]
你的语句写的有问题吧?两个表结构啥样啊,贴出来看看,
[其他解释]
CASCADE
[其他解释]
不可以,但可以用楼上各位大师的方法达到目的。
[其他解释]
好像不行啊
[其他解释]
没有去了解过, 
[其他解释]
use SalaryManageDB
delete from tb_salaryModel1 sm1 join  tb_salaryModel2  sm2 on sm1.modelId=sm2.modelId 
join  tb_salaryModel3 sm3 on sm2.modelId=sm3.modelId 
where sm1.modelId=
(select sm1.modelId from sm1 where sm1.yearId=1999); 

三个表,modelId相同,想级联删除yearId=1999年数据,不成功

热点排行