从表中已存在其值的表中删除条目

时间:2013-12-09 16:48:05

标签: sql algorithm tsql duplicates duplicate-removal

我从这个示例表开始(#temp2):

| a | b |
|---|---|
| 2 | 4 |
| 2 | 5 | x
| 3 | 1 |
| 6 | 4 | x
| 6 | 5 |
| 7 | 5 | x
| 7 | 4 | x
|---|---|

这是我想要从另一个现有表中删除的事务密钥表。它表示否定其他交易的交易,其中否定b,反之亦然。所以我不能有一个否定多个b或一个b否定多个a。我有一些逻辑,我认为会这样做,但有一个问题。使用我现有的逻辑,它将查看a或b是否重复,如果是,则删除它。问题是,如果我想要删除一行,我希望它“释放”不是删除原因的值。我希望这不会太混乱。但是从我的例子中我把x放在我要删除的每一行旁边。目前我的算法是删除太多行。行(6,5)被删除,因为第二行中已经存在'5',但该行被删除(因为'2'不能否定'4'和'5')所以这个'释放了''''否定条目6。

这是我当前的代码,但它删除了太多行:

delete t
from #temp2 t
    where exists(select * from #temp2 
                 where b = t.b 
                    and a < t.a)
  or exists(select * from #temp2
                 where a = t.a 
                    and b < t.b)

非常感谢任何帮助!

0 个答案:

没有答案