我只是想知道我是否能够从两个不同的表中删除记录。
我想我需要一个查询语句,但我不确定从哪里开始。
在两个表中我都有一个名为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中的记录。
任何帮助都将深受赞赏
提前致谢。
答案 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