Tsql 如何从自联接中删除两行

Tsql 如何从自联接中删除两行,tsql,sql-server-2008-r2,self-join,delete-row,Tsql,Sql Server 2008 R2,Self Join,Delete Row,使用SQLServer2008R2:我有一个名为Data的表。我想删除活动A和活动B都发生在同一账户的同一日期范围内的所有行(如下字段“key”所示),因为它们一起构成“wash” 如果我输入代码: 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.T

使用SQLServer2008R2:我有一个名为
Data
的表。我想删除活动A和活动B都发生在同一账户的同一日期范围内的所有行(如下字段“key”所示),因为它们一起构成“wash”

如果我输入代码:

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
删除数据D1
从数据1
内部联接数据D2
在D1.key=D2.key上
和D1。活动='A'
和D2。活动='B'
和D1.TranDate=BeginDateRange
和D2.TranDate=BeginDateRange

我可以从表中删除活动为“A”的行。如何删除活动“B”?我可以在同一个查询中执行此操作吗?删除A行后,帐户将不再显示清洗状态。

如何删除活动“B”?

  • -给Marc_的道具,他编辑了你的问题,并在以前的帖子中给了你答案
  • 使用过程和临时表将结果写入临时表,然后根据临时表中的内容从每个表中删除
  • 在这两个表中都设置一个标志,并根据临时删除所需关联的标志进行删除。因此,当您从其中一个表中删除时,您仍然有需要删除的标记
  • 使用过程和(抖动)光标
  • 这里有很多选择。。。这取决于情有可原的情况。所列的顺序是我在简单的情况下会尝试的顺序
我可以在同一个查询中执行此操作吗?


仅当两个表之间启用了级联删除时;或者你有一个触发器或者可以触发第二次删除的东西

或者在结构本身的表之间强制执行级联删除。或者,您必须让一个过程根据从查询中获得的数据集执行单独的删除。您希望在事务中实现这一点,以便在提交之前两者都能成功;否则,您将无法识别重复的内容。或者,如果您有一个备用字段,则可以更新两个表中的字段,然后从设置了该字段标志的表中删除。或者您可以创建一个包含结果的临时表的过程,然后根据临时表中的内容从这两个表中删除…xQBert,感谢您的响应。你能详细说明一下吗?什么是级联删除?请参阅下面带有链接的答案。可能的重复项,因为可能还有活动“C”、“D”等(我不想删除),我同意您的建议,使用备用字段标记wash条目。谢谢你对可能性的讨论,这就是情有可原的原因。没有一个答案在所有情况下都有效。上下文很重要,因此需要提供选项以涵盖可能未传达的上下文。从我们所知道的情况来看,级联删除似乎是对我最好的回答:然而,可能会有更多的选项,因此还有其他选项。祝你好运(跳出框框思考?什么框框?)