请问几个关联的数据表,如何高效率的删除其中的部分数据啊?

srz007 2006-03-02 08:39:51
比如有3个表A、B、C
xxx代表其它字段
A表结构(ID1 字段为自动增长)
ID1 Time xxx
1 2001-1-1
2 2002-2-2
3 2003-3-3
............

B表结构
ID2 ID1 xxx
4 1
5 1
6 2
...........

C表结构
ID3 ID2 xxx
7 4
8 5
9 6
............

也就是说表A和B是一对多的关系,而B和C是一对一的关系
现在我要删除3个表中时间在2002-2-2 之前的数据,该怎么写执行效率高呢?因为我实际应用中的数据量相对较大,表A大概30几万数据,B和C大概是300多万,请帮我想下该如何执行这个操作呢?谢谢!!!
...全文
131 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgsasd311 2006-03-03
  • 打赏
  • 举报
回复
--try
select id1 into #1 from ta WHERE [TIME]<'2002-2-2'
select id2 into #2 FROM #1 A,TB B where a.id1=b.id1

DELETE TA WHERE [TIME]<'2002-2-2'

DELETE B FROM #1 a,TB B
WHERE a.id1=b.id1

DELETE B FROM #2 a,TC B
WHERE a.id2=b.id2

drop table #1,#2
mislrb 2006-03-03
  • 打赏
  • 举报
回复
试试
-----------------
DELETE TA WHERE [TIME]<'2002-2-2'
DELETE b from TB b where not exists(select 1 from TA where ID1=b.ID1)
DELETE c from TC c where not exists(select 1 from TA where ID2=C.ID2)
ziping 2006-03-02
  • 打赏
  • 举报
回复
是不是在数据库里面设置了表关联了?或者触发器这些东西?
srz007 2006-03-02
  • 打赏
  • 举报
回复
自己顶
srz007 2006-03-02
  • 打赏
  • 举报
回复
先谢谢楼上2位的回答,不过
DELETE C FROM TA A,TB B,TC C
WHERE A.[TIME]<'2002-2-2' AND A.ID1=B.ID1 AND B.ID2=C.ID2
这种方法的执行效率实在是太低了
我昨天按这种方式执行,到现在还没结束呢,已经运行将近24小时了!
wgsasd311 2006-03-02
  • 打赏
  • 举报
回复
DELETE C FROM TA A,TB B,TC C
WHERE A.[TIME]<'2002-2-2' AND A.ID1=B.ID1 AND B.ID2=C.ID2

DELETE B FROM TA A,TB B
WHERE A.[TIME]<'2002-2-2' AND A.ID1=B.ID1

DELETE TA WHERE [TIME]<'2002-2-2'
lsqkeke 2006-03-02
  • 打赏
  • 举报
回复
在A表上建立删除触发器
或者写在一个存储过程里边,用事务处理
srz007 2006-03-02
  • 打赏
  • 举报
回复
自己 up
srz007 2006-03-02
  • 打赏
  • 举报
回复
能给出具体的方法么?
mm2love2zz 2006-03-02
  • 打赏
  • 举报
回复
用游标的目的是为了循环
临时表保存取出的符合条件的A表的ID1字段内容
mm2love2zz 2006-03-02
  • 打赏
  • 举报
回复
写一个函数

运用游标和临时表,循环删除

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧