2016-05-13 25 views
0

CUSTOMER_IDB_CODEの関係を持つテーブルがあります。 B_CODEが異なるCUSTOMER_IDのインスタンスが複数存在します。私はスワップリスト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

(a)のあなたがのためにb_codeを知っているすべての行を削除する場合:

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

(b)はそれとも、すべての行を削除する場合あなたが知っているものを除き、

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

削除のために選択されたb_codesがほとんどない場合は、(a)を使用します。

保存するb_codesが少ない場合は(b)を使用します。

+0

いいえ、特定のcustomer_idを持つ行の一部を削除しますが、すべてではありません – Zerjack

+0

@Zerjackは私の更新された回答を見て、私はあなたの編集を見ました。 – MrSimpleMind

+1

それは私が探しているものです。ありがとう! – Zerjack

0

お客様1人あたり複数のコードを削除できるUIがあることがわかっている場合。私はどの基準が保存のために選択されるのか不明です。あなたの例では、Dを選択します。UIのシナリオでは、ユーザーが削除のためにDを選択しないと思います。

根本的な質問には、正しく理解すれば、Row_Numberおよび/またはRankを使用して、削除するレコードを照会することができます。あなたの例ではDを選択するので、ウィンドウ関数で簡単な順序に頼ることはできません。正しいキーパーレコードを確実に選択するためには、ソートフィールドや関連テーブルが必要な場合があります。

+0

Hmmm ....正直なところ、あなたが言ったことの多くを理解できませんでした...基準はありません。ユーザーが保持するものと削除するものを選択できるようにするスワップUIの2つのリストボックス。 – Zerjack

+0

私のポイントは、行番号を使用してcustomerIDとランク付けして、値をハードコーディングするのではなく特定の行がキーパーとして選択されるように行を並べ替えることでした。私はswapUIに精通していないので、私は最初に考えたことがはるかに単純であると仮定します。 –

関連する問題