删除重复的行(MySQL 5.7)

时间:2019-03-01 22:43:41

标签: mysql sql database duplicates

使用

后,我大约有75,000个条目/行
SELECT WWW, COUNT(*) c FROM pmd_listings GROUP BY WWW HAVING c > 1;

我发现我大约有9000个重复项(仅基于一列,实际上可能会少一些)。我只能对聚合函数使用分组方式(不完全确定这意味着什么),但是如果行在这些列中匹配,我想删除重复项(以确保它们是重复项)

"friendly_url" "www""listing_zip"在表"pmd_listings"中。

我尝试运行此模拟:

  

https://pastebin.com/QWCb5jJ4

但是出现以下错误:

 #1054 - Unknown column 'c1.id' in 'where clause'

我该如何完成?非常感谢您的帮助!

谢谢!

2 个答案:

答案 0 :(得分:1)

对于MySql,需要在DELETE和FROM之间引用别名c1
尝试这种方式:

DELETE FROM pmd_listings
WHERE id NOT IN (
  SELECT t.id FROM ( 
    SELECT MIN(id) id
    FROM pmd_listings
    GROUP BY friendly_url, www, listing_zip
  ) t
)

答案 1 :(得分:0)

您可以将left joindelete一起使用:

delete pl
    from pmd_listings pl left join
         (select pl2.friendly_url, pl2.www, pl2.listing_zip, min(id) as min_id
          from pmd_listings pl2
          group by pl2.friendly_url, pl2.www, pl2.listing_zip
         ) pl2
         on pl2.id = pl.id
    where pl2.id is null;

聚合子查询查找三列组合的所有最小ID。 left join查找与这些ID匹配的内容,而where意味着删除所有不匹配的行,即除第一行外的所有行。