删除重复行但保留一个没有唯一列
Delete duplicate rows but keep one without having a uniqe column
我有一个 table,其中包含我想要删除的重复条目,保留 none 但其中一个重复条目。正如你所看到的,它们在每个列中都完全相同,无法区分它们:
我使用这个查询来计算我有多少重复项:
select url_rewrite_id, category_id, product_id, count(*) cnt
from catalog_url_rewrite_product_category
group by url_rewrite_id, category_id, product_id
having cnt > 1
order by cnt desc
我可以使用它的变体来删除所有重复项:
delete
from catalog_url_rewrite_product_category
where url_rewrite_id in (
select url_rewrite_id
from catalog_url_rewrite_product_category
group by url_rewrite_id, category_id, product_id
having count(*) > 1
)
我遇到的问题是它会删除 所有 个重复的条目并且不会保留最后一个条目。
较早的问题 (here and here) 假设有一个唯一的 id
列,而我的数据结构并非如此。
您是否尝试过我在您分享的帖子 (here) 中阅读的解决方案之一?
ALTER IGNORE TABLE jobs
ADD UNIQUE INDEX idx_name (site_id, title, company);
我认为这可行。
我有一个 table,其中包含我想要删除的重复条目,保留 none 但其中一个重复条目。正如你所看到的,它们在每个列中都完全相同,无法区分它们:
我使用这个查询来计算我有多少重复项:
select url_rewrite_id, category_id, product_id, count(*) cnt
from catalog_url_rewrite_product_category
group by url_rewrite_id, category_id, product_id
having cnt > 1
order by cnt desc
我可以使用它的变体来删除所有重复项:
delete
from catalog_url_rewrite_product_category
where url_rewrite_id in (
select url_rewrite_id
from catalog_url_rewrite_product_category
group by url_rewrite_id, category_id, product_id
having count(*) > 1
)
我遇到的问题是它会删除 所有 个重复的条目并且不会保留最后一个条目。
较早的问题 (here and here) 假设有一个唯一的 id
列,而我的数据结构并非如此。
您是否尝试过我在您分享的帖子 (here) 中阅读的解决方案之一?
ALTER IGNORE TABLE jobs
ADD UNIQUE INDEX idx_name (site_id, title, company);
我认为这可行。