sql - 如何删除两个表的一个记录?

  显示原文与译文双语对照的内容
0 0

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

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

在这两个表中,我有一个称为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中的记录。

任何帮助都将深入 apprecitated

先谢谢了。

时间: 原作者:

0 0

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 会更适合在这里,我想。

原作者:
0 0

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

如果你只想使用一个查询,那么你可能希望查看触发器和/或者层叠更新

原作者:
0 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 );

原作者:
0 0

从表中删除t2t1,t2加入表t1.cardid=t2.cardid t1.recordstatus = 2和 t1.expiry <= ( 选择转换( varchar ( 8 ), 今天,112)今天从( 选择 dateadd ( 年,-1,getdate ( ) ))aa)

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

原作者:
...