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)
从内到外:
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))