4

我需要从我的数据库表中清除一些旧数据。下面显示了两个表app_statusapp_personal_details

在此处输入图像描述

我有以下查询从app_status表中选择从今天起 12 个月内创建的所有记录(应用程序)

select status_id  
from dbo.app_status  
where submission_date <= dateadd(month, -12, getdate()) order by 1

然后,我想从app_personal_details表中删除上面检索到的 status_id 列表中存在 application_id 的所有记录。

我希望这是有道理的。我想知道从两个表中删除数据的快速方法。

谢谢你的帮助。

4

4 回答 4

4
delete from app_personal_details
where application_id in (
    select status_id   
    from dbo.app_status   
    where submission_date <= dateadd(month, -12, getdate())
)
于 2012-10-22T13:53:37.660 回答
2

您可以使用子选择。

DELETE FROM app_personal_details
WHERE application_id IN
(
    SELECT status_id  
    FROM dbo.app_status  
    WHERE submission_date <= DATEADD(month, -12, GETDATE())
)
于 2012-10-22T13:53:51.243 回答
2

执行此操作并在两个表上进行一致删除的一种方法如下:

Select status_id  
Into #to_delete
From dbo.app_status  
Where submission_date <= dateadd(month, -12, getdate())

Create Unique Clustered Index PK_X On #to_delete (status_id)

Delete 
  app_personal_details
From
  app_personal_details apd Inner Join
  #to_delete d On apd.application_id = d.status_id

Delete 
  app_status
From 
  app_status a Inner Join
  #to_delete d On a.status_id = d.status_id

您可以使用输出子句在较少的语句中执行此操作,或者如果您在两个表之间有删除级联。

于 2012-10-22T14:08:59.327 回答
0

如果表很大,你宁愿分批删除,这样你的事务日志就不会成倍增长,sql server 会处理得更快。

您可以通过 DELETE TOP (N) ... 或删除特定日期范围来限制要删除的行。

于 2012-10-23T09:29:03.633 回答