SQL 语句删除问题同时删除两个表内关联的数据

2024-11-09 18:40:26
推荐回答(3个)
回答(1):

一个sql语句是没办法执行两个删除操作,如果你要实现上面的功能,有以下几个选择:
1.用外键关联删除,把B表的uid设成外键关联A表的ID,并关联删除操作
2.用存储过程,用事务来处理实现;

望采纳!

回答(2):

楼主,你好!我在自己的实体中演示了下,下面是代码:

--创建临时表
create table #TB_A(
    FID int,
    FName nvarchar(10),
    FDate datetime
)
create table #TB_B(
    FID int,
    FUserID int,
    FItemName nvarchar(20)
)
create table #TB_C(
    FID int
)
--向临时表插入数据
insert into #TB_A values(1,'张三','2013-05-14')
insert into #TB_A values(2,'李四','2013-04-14')
insert into #TB_A values(3,'王五','2013-05-14')
insert into #TB_B values(1,2,'牙刷')
insert into #TB_B values(2,3,'肥皂')
--查询插入前的记录
select *
from #TB_A
select *
from #TB_B
--内连接查询符合日期相差一天的用户ID
insert into #TB_C
select t1.FID
from #TB_A t1
inner join #TB_B t2 on t1.FID = t2.FUserID
where DATEDIFF(DAY,t1.FDate,GETDATE()) = 1
--删除#TB_A、#TB_B的记录
delete
from #TB_A
where FID in (
    select FID
    from #TB_C
)
delete
from #TB_B
where FUserID in (
    select FID
    from #TB_C
)
--查询删除后的记录
select *
from #TB_A
select *
from #TB_B
--删除临时表
drop table #TB_A
drop table #TB_B
drop table #TB_C

方法有很多种,仅供参考!

回答(3):

如果你建立了关系的话,直接删除A表的数据,自动的会删除B表的数据的。
delete from A where datediff( dd,购买时间,getdate())>=1。
如果主键表没有数据,按照级联相关性,外键表中数据自动删除的。