基于其他行的条件更新和删除

时间:2014-11-22 22:16:44

标签: sql sql-server

我有一张看起来像这样的桌子

PK ITEM_CODE PK VENDOR_CODE PRIMARY_VENDOR  
   0001         11111       T
   0001         999999      T
   0002         11111       T
   0002         999999      T
   0003         11111       T
   0004         999999      T

任何将11111设置为供应商代码的项目都需要更新为99999。

问题是,我没有主要供应商的任何项目,所以我不能简单地将11111的所有实例设置为F或删除它们。

我也有重复项,因此我不能将所有111111设置为999999,因为这违反了PK。

如何在没有重复条目的情况下,首先更新所有11111到999999,然后在有99999条目的情况下删除11111。

1 个答案:

答案 0 :(得分:0)

如何首先删除有供应商99999的11111的所有值。然后更新值和行。

delete t from replenish_vendor t
    where vendor_code = 111111 and
          exists (select 1 from replenish_vendor t2 where t2.item_code = t.item_code and t2.vendor_code = 99999);

update replenish_vendor t
    set vendor_code = 99999,
        primary_vendor = 'F'
    where vendor_code = 111111;

您的文字表明您希望在这种情况下将主要供应商设置为F。第一次删除可能需要考虑primary_vendor

如果您有可能在数据库上进行其他数据库操作,则应将它们包装在单个事务中,以便其他事务不会干扰数据。