【问题标题】:Remove duplicate rows from mysql table从mysql表中删除重复的行
【发布时间】:2013-08-19 06:00:28
【问题描述】:

我有一个名为urls的mysql表

它有以下字段

url
title (default null)
content (default null)

我的表格有很多重复的行。

我想删除那些重复的。

例如

google.com - Google - search engine
google.com - null - null
google.com - Google - search engine

现在我想删除 title = null 所在的行加上重复的行。

我只希望 url 是唯一的,没有重复的行。

有人能告诉我怎么做吗?

【问题讨论】:

  • 这个表有没有主键字段ID?
  • No.. url 是主键
  • @Giri,首先,将您的 url 字段标记为 unique

标签: mysql


【解决方案1】:

这是最简单的:

create tableB like tableA;
INSERT INTO tableB SELECT DISTINCT * FROM tableA WHERE title IS NOT NULL;
DROP tableA;
RENAME tableB TO tableA;

即使在生产环境中,删除和重命名通常也足够快,几乎不会被任何用户看到。仔细检查以确保最终得到适当的索引。

【讨论】:

    【解决方案2】:

    您可以添加 url 作为唯一索引。以下查询将添加唯一索引并删除重复数据。

    alter ignore table urls add unique index(url);
    

    如果您不想添加唯一索引,那么另一种方法是创建一个具有唯一索引的临时表,复制数据,删除重复项并转移回原始表。

    【讨论】:

      【解决方案3】:
          DELETE FROM urls WHERE title IS NULL 
                 OR url IN (SELECT a.URL from urls a, urls b WHERE a.url=b.url);
      

      【讨论】:

        猜你喜欢
        • 2011-07-18
        • 1970-01-01
        • 2023-04-02
        • 2017-10-11
        • 2011-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多