2017-11-08 4 views
0

重複行の削除/更新に関するその他の記事を見てきましたが、私の特定の苦境に正しく適用する方法について少し混乱しました。MYSQLの論理削除のために重複行を更新する

誰かが私に正しい方向へのプッシュを与えることを望んでいた。

私は、それにいくつかの重複行を持つテーブルがあると論理的に私のテーブルは、符号なしのbigintであるidという主キーを持つ1.

にisdeleted列を設定することにより、各ユーザーのためにそれらを削除したいです複製された別のIDを表すcidという列があります。 cidはユーザーごとに一意ではありませんが、特定のユーザーに対して一意である必要があります。

あなたは私のテーブルでこれを見ることができる例えば:

id | cid | userid | is_deleted 
1 | 1 | 100 | 0 
2 | 2 | 101 | 0 
3 | 1 | 102 | 0 
4 | 1 | 100 | 0 
5 | 2 | 101 | 0 

したがって、この場合には、ユーザ#100が同じである2つのCIDを持っている - のレコード#1とレコード#4上に。同様に、ユーザー#101には同じレコード番号2とレコード番号5の2つのCIDがあります。

私がしたいのは、特定のユーザーの重複したCIDを取得し、is_deletedを1に設定することです。実際の行をパージします。私は1つのレコードをis_deleted = 0として保存したいので、このように何かが保持されます。

だから私が望んでいるはずだ出力は、次のとおりです。

id | cid | userid | is_deleted 
1 | 1 | 100 | 0 
2 | 2 | 101 | 0 
3 | 1 | 102 | 0 
4 | 1 | 100 | 1 
5 | 2 | 101 | 1  

私はコードでこれを行うことができますが、それはかなり複雑になるだろう、と私は純粋なSQL文のためのいくつかの素晴らしい回答を見てきました。誰かがアドバイスをしたり、解決策を提示したりすることができますか?

ありがとうございます!

答えて

0

あなたは

Update table t 
inner join 
(select id from table group by userid,cid having count(1)>1) t1 
on t1.id = t.id 
set t.is_deleted=1; 
、N繰り返しエントリのうちの1行を更新するために、次のクエリを使用することができます
関連する問題