2016-09-26 4 views
0

私は自分のDBにいくつかのエントリーを持っています。ダブルエントリーを削除する

など。

Bookname A - UserA 
Bookname B - UserB 

これで、同じ名前の書籍をインポートし、オーナーとして「UserC」を作成しました。

だから今は

Bookname A - UserA 
Bookname B - UserB 
Bookname A - UserC 
Bookname C - UserC 

どのように私は所有者がよびUserCで、booknameがまだよびUserCではない別の人が所有しているエントリのみを削除することができますがありますか?

私の結果は次のようになります。

Bookname A - UserA 
Bookname B - UserB 
Bookname C - UserC 

ありがとうございました!

+0

どのエントリが正しいと判断され、保持されるべきかはどのように決定されますか? – syck

+0

この場合、UserAからの書籍がすでに存在する場合、UserCを持つものがデータベースに間違って追加されていると仮定できます。 S.いくつかの特定の状況のた​​めに、主キーとしてブック名を使用することはできません。 –

答えて

0

あなたはそれを使用するように、内側の選択との答えは、動作しないことができる

delete from my_table 
where bookname in ( 
    select Bookname 
    from my_table 
    group by Boookname 
    having count(*) > 1) 
and User = 'C'; 
+0

** **の名前は** - これは何を示していますか?あなたは "bookname"を意味しましたか? –

+0

@MrKayodoubleuはいはbookanmeです – scaisEdge

0

ユーザー=「C」で削除よりエントリーし、フィルターで名を取得するために有することに基づいて副選択を使用することができますFROM句の更新対象です。 MySQLはそれを許可していません。 ただし、削除結合を使用することは可能です。私のソリューションは、おそらく最もエレガントではありませんが、それは動作します:

DELETE t1 FROM book_table t1 LEFT JOIN book_table t2 ON t1.book = t2.book AND t2.user <> 'C' WHERE t1.user = 'C' AND t2.user IS NOT NULL; 

より良いテストは、まず、選択の代わりに、削除して、あなたは正しいエントリを削除するために起こって見ることができるように。

関連する問題