如何从两个表中删除一条记录?

时间:2011-02-22 08:38:57

标签: sql database

我只是想知道我是否能够从两个不同的表中删除记录。

我想我需要一个查询语句,但我不确定从哪里开始。

在两个表中我都有一个名为CardID的字段。

在我的第一张表中,我有一个声明,

delete from Table1
where recordstatus = 2
and expiry <=(Select convert(varchar(8),today,112)
from(Select dateadd(year,-1,getdate())as today)aa)

然后我需要删除表2中的记录。

任何帮助都将深受赞赏

提前致谢。

4 个答案:

答案 0 :(得分:1)

DECLARE @deleted TABLE (CardID int);

delete from Table1
OUTPUT deleted.CardID INTO @deleted (CardID)
where recordstatus = 2
and expiry <=(Select convert(varchar(8),today,112)
from(Select dateadd(year,-1,getdate())as today)aa);

DELETE FROM Table2
FROM @deleted d
WHERE Table2.CardID = d.CardID;

Table1删除时,还会将已删除的CardID值存储到表变量(添加的OUTPUT子句)中。然后使用该列表相应地从Table2删除。

如果总是需要同步从两个表中删除,我认为Table1上的删除触发器会更适合这里。

答案 1 :(得分:0)

您是否有理由不想发出两个不同的查询?这将是最简单的解决方案。我想是什么阻止你这样做是因为你的数据库可能没有正确的主/外键结构。

如果您确实只想使用一个查询,则可能需要查看触发器和/或级联更新

答案 2 :(得分:0)

试试这个

DELETE FROM Table2 
WHERE  CardID IN (SELECT CardID from Table1 
    where recordstatus = 2 and expiry <=
    (Select convert(varchar(8),today, 112) 
    from(Select dateadd(year,-1,getdate()) as today) aa ));

delete from Table1 where recordstatus = 2 
and expiry <=(Select convert(varchar(8),today, 112)
    from(Select dateadd(year,-1,getdate()) as today) aa );

答案 3 :(得分:0)

从table2删除t2作为t2将table1连接为t1.CardID = t2.CardID,其中t1.recordstatus = 2 和t1.expiry&lt; =(选择转换(varchar(8),今天,112) from(选择dateadd(年,-1,getdate())为今天)aa)

这将是您从table2中删除记录的第一个删除查询,然后使用原始查询从table1中删除记录...如果我错过了任何字段,则在此查询中添加t1。在此之前,我添加了t1.expiry