2014-11-22 41 views
0

我有一個表,看起來像這樣條件更新和刪除基於其他行

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(沒有重複條目),然後刪除11111以查找存在99999條目的情況。

回答

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

如果您有其他數據庫操作發生在數據庫上的任何可能性,您應該將它們包裝在單個事務中,以便其他事務不會干擾數據。

+0

所以我正在使用的表是REPLENISH_VENDOR。對不起,請問,但是你能用正確的表名更新你的答案嗎?我不明白t2參考的來源? – todbanner 2014-11-22 22:31:20

+0

如果我將「刪除」改爲「select * from」,查詢的第一部分返回需要刪除的所有行。如果我更改回「刪除」軟件抱怨「附近't'的語法不正確 - SQL Server 2005服務器管理Sudio V9 – todbanner 2014-11-22 22:51:14

+0

我的錯誤,錯過了第一個t。 – todbanner 2014-11-22 23:25:14