我有一个这样的Mysql表
供应商排名
Id
supplierid
userid
rank
现在我得到了一个垃圾数据,其中一个用户的userid=1837已经对一个供应商排名了太多次,所以有多行相同的排名,我想删除所有这些并保留一个
例如
1 267 1837 23
2 267 1837 23
3 267 1837 23
4 267 1837 23
5 267 1837 23
6 268 1837 1
7 268 1837 1
8 268 1837 1
9 268 1837 1
10 268 1837 1
现在我想把它改成这个
1 267 1837 23
6 268 1837 1
知道我怎么写查询吗
谢谢
最佳答案
您可以使用以下查询:
DELETE FROM supplierranks_new
WHERE `Id` NOT IN (
SELECT `Id`
FROM (SELECT MIN(`Id`) AS `Id`
FROM supplierranks_new
GROUP BY `supplierid`, `userid`, `rank`) AS t )
这将删除在
Id
,supplierid
,userid
切片中没有最小rank
值的任何重复行。请注意
NOT IN
运算符中使用的子查询,以避免:不能指定目标表“supplierranks\u new”以从中更新
条款
错误。
Demo here