Php 有选择地从MySQL中删除大部分重复记录

Php 有选择地从MySQL中删除大部分重复记录,php,mysql,sql,Php,Mysql,Sql,我有一张桌子: PRICE_UPDATE id (int 5, auto-increment, primary, unique) part_number (varchar 10, non-null) price (float(10,2), non-null) 部分零件编号重复(1条或多条重复记录)。有时价格相同,有时价格不同 如何根据零件号删除所有重复行,如果价格相同,则保留最高价格或仅保留一条记录? 这在纯MySQL中是否可行?DELETE t1 DELETE t1 FROM You

我有一张桌子:

PRICE_UPDATE
id (int 5, auto-increment, primary, unique)
part_number (varchar 10, non-null)
price (float(10,2), non-null)
部分零件编号重复(1条或多条重复记录)。有时价格相同,有时价格不同

如何根据零件号删除所有重复行,如果价格相同,则保留最高价格或仅保留一条记录?

这在纯MySQL中是否可行?

DELETE t1
DELETE t1
    FROM YourTable t1, YourTable t2
    WHERE t1.part_number = t2.part_number
        AND (t1.price, t1.id) < (t2.price, t2.id)
从表t1到表t2 其中t1.零件号=t2.零件号 和(t1.price,t1.id)<(t2.price,t2.id)
从内到外:

  • 选择具有每个零件号的最高价格的标识
  • 选择每个零件号的最大价格的最大id
  • 删除2中不存在的ID


  • OP还希望在价格相同的情况下删除它们(当然,留下一个)。这几乎是海报想要的——除了如果零件号的最高价格重复,那么您的查询将保留所有这些。我会添加
    或(t1.price=t2.price和t1.id
    来删除duplicates@JoeStefanelli最简单的方法就是最简单的方法。做得好:需要更正。它应该是Ian的评论或类似的:
    和(t1.price,t1.id)
    和t1.id t2.id和t1.id t2.id
    delete tablename where id not in (
    (select max(id) from tablename a
     inner join
      ( select id, max(price)
        from tablename
        group by part_number ) b on a.id = b.id and a.price = b.price
     group by part_number))