我有一个这样的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 )

这将删除在Idsupplieriduserid切片中没有最小rank值的任何重复行。
请注意NOT IN运算符中使用的子查询,以避免:
不能指定目标表“supplierranks\u new”以从中更新
条款
错误。
Demo here

08-20 01:46
查看更多