从MySQL中选择性地删除重复记录

6 php mysql sql

我有一张桌子:

PRICE_UPDATE
id (int 5, auto-increment, primary, unique)
part_number (varchar 10, non-null)
price (float(10,2), non-null)
Run Code Online (Sandbox Code Playgroud)

其中一些part_number是重复的(一个或多个重复记录).有时价格相同,有时价格也不同.

如何根据part_number删除所有重复行,如果价格全部相同,则保留最高价格或仅记录1条记录?

这在直接MySQL中是否可行?

Joe*_*lli 12

DELETE t1
    FROM YourTable t1, YourTable t2
    WHERE t1.part_number = t2.part_number
        AND (t1.price, t1.id) < (t2.price, t2.id)
Run Code Online (Sandbox Code Playgroud)

  • 如果价格相同,OP也想删除它们(当然只剩下一个). (3认同)
  • 这几乎是海报想要的 - 除了如果零件编号的最高价格重复,那么您的查询将留下所有这些.我添加`或(t1.price = t2.price和t1.id <t2.id)`来删除重复项 (3认同)
  • @JoeStefanelli +1最简单的方法是最简单的方法.做得好:D (2认同)
  • 需要更正.它应该是Ian的评论或者像这样:`AND(t1.price,t1.id)<(t2.price,t2.id)` (2认同)