2016-04-12 8 views
2
+------+---------+---------+ 
| id | user_id | job_id | 
+------+---------+---------+ 
| 92 |  58 |  4 | 
| 896 |  58 |  4 | 
| 988 |  58 |  22 | 
| 991 |  58 |  22 | 
| 894 |  58 |  38 | 
| 548 |  58 |  38 | 

user_idに同じjob_idが重複しているエントリを削除したいとします。言い換えれば、user_idに関連付けられた1つの異なるjob_idのみが存在する必要があります。この例では、4,22,38のみでなければなりません(エントリは重複しません)。 user_idに対して1つのjob_idしか一致しない限り、影響を受けるIDは関係ありません。mysqlテーブルの重複するペアを削除する

+1

ALTER IGNORE TABLE t追加ユニークキー(user_id、job_id) – Mihai

答えて

4

DELETE t1 FROM tab t1, tab t2 
WHERE t1.id < t2.id 
    AND t1.user_id = t2.user_id 
    AND t1.job_id = t2.job_id; 

SqlFiddleDemo

出力:

╔══════╦══════════╦════════╗ 
║ id ║ user_id ║ job_id ║ 
╠══════╬══════════╬════════╣ 
║ 896 ║  58 ║  4 ║ 
║ 991 ║  58 ║  22 ║ 
║ 894 ║  58 ║  38 ║ 
╚══════╩══════════╩════════╝ 

UNIQUE INDEXuser_idjob_idに追加することをお勧めします。

2

あなただけleft joinを使用することができます。

あなたが使用することができ
delete t 
    from t left join 
     (select min(id) as minid 
      from t 
      group by user_id, job_id 
     ) tt 
     on t.id = tt.minid 
    where tt.minid is null; 
関連する問題