+------+---------+---------+
| 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相关联的不同job_id。在这个例子中,应该只有4,22,38(而不是重复的条目)。只要只有一个job_id与user_id匹配,哪个ID受影响并不重要。
答案 0 :(得分: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 INDEX
和user_id
上添加job_id
以避免此问题。
答案 1 :(得分: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;