【问题标题】:How to delete only duplicate rows?如何只删除重复的行?
【发布时间】:2012-02-29 11:33:14
【问题描述】:

我如何创建一个 SQL 命令来删除表中的所有行,其中我有两个或多个具有相同值的特定列,但我仍然不会丢失该行,只有重复的行?

例如:

Id      value1     value2
1          71            5
2          8             8
3          8             8
4          8             8
5          23           26

Id2、Id3 和 Id4 具有相同的 value1value2

我需要删除所有重复的行,例如 (Id3 and Id4) or (Id2 and Id4) or (Id2 and Id3)

【问题讨论】:

  • “相关”列中有很多重复项
  • 在你的表中使用 distinct(value1),distinct(value2)
  • 我认为 distinct 在列级别上工作。不是现场级别。由于 Id 不同,Distinct 不起作用?

标签: mysql sql duplicates


【解决方案1】:
delete t
from table1 t
inner join table1 t2
on t.id>t2.id and t.value1=t2.value1 and t.value2=t2.value2

【讨论】:

    【解决方案2】:

    由于 MySQL 允许查询中的未分组字段:

    CREATE TEMPORARY TABLE ids AS
      (SELECT id
        FROM your_table
        GROUP BY value1, value2);
    
    DELETE FROM your_table
      WHERE id NOT IN (SELECT id FROM ids);
    

    【讨论】:

      【解决方案3】:

      您可以通过以下方式将不同的记录复制到新表中:

      select distinct * into NewTable from MyTable
      

      【讨论】:

        猜你喜欢
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 2010-09-06
        • 2017-12-04
        相关资源
        最近更新 更多