2016-05-13 16 views
0

假設我有一張表,它與CUSTOMER_IDB_CODE之間存在關係。 CUSTOMER_ID有多個不同的實例B_CODE。我正在創建一個UI,能夠根據交換列表UI添加和刪除此表中的代碼。我知道如何在同一查詢中插入多行,但我不確定如何在刪除時執行同樣的操作。刪除同一查詢中的多個行

我知道我可以刪除所有CUSTOMER_ID的實例,然後添加列表中剩下的內容。但是,這似乎是一個不好的方法來做到這一點。

那麼,如何刪除同一個查詢中具有相同ID,不同代碼的表上的多行,但不刪除此ID的所有實例?因此,例如

我得到這個

+------------+---------+ 
| 123  | A  | 
| 124  | B  | 
| 123  | C  | 
| 123  | D  | 
| 124  | E  | 
| 123  | F  | 
+------------+---------+ 

,我只想要刪除 123 -> A123 -> C,並123 -> F但不123 -> D,並且在相同的查詢。

+0

請提供數據和預期結果,它更容易幫助... – MrSimpleMind

+0

@MrSimpleMind當然,格式不是最好的。 – Zerjack

回答

0

SqlFiddle

(一)如果你想刪除您知道b_code所有行:

delete from t where customer_id = 123 and b_code in ('A','C','F'); 

(B)或者,如果你想刪除所有行除了你知道b_code的那個

delete from t where customer_id = 123 and b_code not in ('D'); 

使用(a)如果您選擇刪除很少的b_codes。

使用(b)如果您有很少的b_codes需要保留。

+0

不,我想刪除一些特定的customer_id行,但不是所有的行 – Zerjack

+0

@Zerjack看到我更新的答案,我剛看到你的編輯。 – MrSimpleMind

+1

是的,這就是我要找的。謝謝! – Zerjack

0

如果我明白你有一個用戶界面,可以刪除每個客戶的多個代碼。我不確定選擇保存哪條記錄的標準。在你的例子中,你選擇D.在UI場景中,我認爲用戶不會選擇D進行刪除。

對於根問題,如果我理解正確,可以使用Row_Number和或Rank來查詢要刪除的記錄。因爲在你的例子中你選擇了D,所以你不能依靠一個簡單的命令,在窗口函數中你可能必須有一個排序字段或一個相關的表格來確保你選擇了正確的'守護者'記錄。

+0

嗯....老實說,我不能理解你說的很多......沒有標準。只有兩個交換UI方式的列表框允許用戶選擇要保留的內容和要刪除的內容。 – Zerjack

+0

我的觀點是,您可以使用行號和/或排名以及customerID來排列行,以便選擇特定的行作爲管理者而不是對值進行硬編碼。我對swapUI並不熟悉,所以我認爲我首先想到的就簡單多了。 –

相關問題