2017-03-22 4 views
1
id | rem_id |max_val 
-- | ------ |------ 
1 | 1  | 7 
2 | 2  | 6 
3 | 3  | 1 
4 | 1  | 1 
5 | 2  | 1 
6 | 3  | 1 

上記の表では、私はMAX_VAL列に分Valにrem_id列から重複を削除する必要が別の列の最大値と比較することにより、重複レコードを削除する - MySQLの

id | rem_id |max_val 
-- | ------ |------ 
1 | 1  | 7 
2 | 2  | 6 
3 | 3  | 1 
+0

同じrem_idは3行に存在する場合、どのように多くのあなたが保存しておきたいん - 1または2を? – jarlh

答えて

1

これは最高のが、すべてを削除する各rem_idためmax_valを大切に、またはid高いとそれらを削除することによって、同じmax_valの倍数:

delete t 
from t 
    left join t as i 
    on i.rem_id = t.rem_id 
    and (i.max_val > t.max_val 
     or (i.max_val = t.max_val and i.id < t.id) 
    ) 
where i.id is not null; 

rextesterデモ:http://rextester.com/QKIK17666

リターン:

+----+--------+---------+ 
| id | rem_id | max_val | 
+----+--------+---------+ 
| 1 |  1 |  7 | 
| 2 |  2 |  6 | 
| 3 |  3 |  1 | 
+----+--------+---------+ 
+1

@Puhalお手伝いします! – SqlZim

+0

FROM句では、更新の対象テーブル 'userRank'を指定できません。私はこのエラーを受けています – Puhal

+0

@Puhal 'exists()'の代わりに自己結合に変換しました、私の謝罪します。 – SqlZim

関連する問題