我需要从数据库表中清除一些旧数据。下面显示了两个表格, app_status 和 app_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 表中的所有记录,其中application_id存在于上面检索到的status_id列表中。
我希望这是有道理的。我想知道一种从两个表中删除数据的快捷方法。
感谢您的帮助。
答案 0 :(得分:4)
delete from app_personal_details
where application_id in (
select status_id
from dbo.app_status
where submission_date <= dateadd(month, -12, getdate())
)
答案 1 :(得分:2)
您可以使用子选择。
DELETE FROM app_personal_details
WHERE application_id IN
(
SELECT status_id
FROM dbo.app_status
WHERE submission_date <= DATEADD(month, -12, GETDATE())
)
答案 2 :(得分:1)
执行此操作并在两个表上获得一致删除的一种方法是这样的:
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
您可以使用输出子句在less语句中执行此操作,或者如果两个表之间有删除级联。
答案 3 :(得分:0)
如果表很大,你宁愿批量删除,这样你的事务日志就不会成倍增长,而且sql server会更快地处理它。
您可以通过删除TOP(N)...或删除特定日期范围来限制要删除的行。