如何从自联接中删除两行

时间:2014-07-22 18:33:33

标签: tsql sql-server-2008-r2 self-join delete-row

使用SQL Server 2008 R2:我有一个名为Data的表。我想删除活动A和活动B都出现在同一帐户的相同日期范围内的所有行(如下面的字段“key”所示),因为它们一起构成“清洗”。

如果我编码:

Delete Data D1
from Data1
inner join Data D2
on D1.key = D2.key
and D1.Activity = 'A'
and D2.Activity = 'B'
and D1.TranDate < EndDateRange
and D1.TranDate >= BeginDateRange
and D2.TranDate < EndDateRange
and D2.TranDate >= BeginDateRange

我可以从表中删除活动“A”的行。我怎样才能删除活动'B'?我可以在同一个查询中执行此操作吗?删除行A后,该帐户将不再显示清洗条件。

1 个答案:

答案 0 :(得分:1)

如何删除活动&#39; B&#39;

  • use cascade delete - 修改你的问题并在之前的帖子中给你答案的Marc_s的道具。
  • use a trigger
  • 使用过程和临时表将结果写入临时表,然后根据临时表中的内容从每个表中删除。
  • 在两个表中设置一个标志,并根据暂时删除所需关联的标记进行删除,因此当您从一个表中删除时,仍然会标记需要删除的标记。
  • 使用程序和(颤抖)光标
  • 这里有很多选择...只是取决于情有可原的情况。列出的订单是订单I,在简单的情况下尝试它们。

我可以在同一个查询中执行此操作吗?

仅在两个表之间启用级联删除时;或者您有一个触发器或可以触发第二次删除的东西。 You can't delete from two tables at once