【问题标题】:How do I delete all duplicate rows without a primary key? [duplicate]如何删除没有主键的所有重复行? [复制]
【发布时间】:2014-09-03 00:38:07
【问题描述】:

我有一个没有任何唯一键或主键的表。它有 50 列,任何或所有这些列都可以是重复的。如何删除所有重复的行但保留第一次出现?

【问题讨论】:

标签: mysql sql duplicate-removal delete-row


【解决方案1】:

一般的 SQL 方法是存储数据、截断表并重新插入数据。语法因数据库而异,但这里是一个示例:

create table TempTable as
    select distinct * from MyTable;

truncate table MyTable;

insert into MyTable
    select * from TempTable;

还有其他方法不需要临时表,但它们更依赖于数据库。

【讨论】:

  • 这会留下一组重复行的第一行吗? RDBMS 是 mysql
  • @Ranchoddasshyamaldaschanchad。 . .如果所有列都相同,如何区分第一次出现和其他任何一次出现?
  • 我的意思是如果有三行,其中每一列都是完全重复的,那么我想留下一行并删除两行。
  • @Ranchoddasshyamaldaschanchad。 . .这就是这种方法的作用。 distinct 在临时表中保存每个不同行的一份副本,然后在原表清空后插入。
  • 非常感谢;它非常有帮助。
【解决方案2】:

如果您使用的是 mysql 数据库,请使用以下命令

ALTER IGNORE TABLE 表名 ADD UNIQUE INDEX (field1,field2,field3...) 这允许通过添加唯一索引来删除重复项,即使有重复条目。(因此使用 IGNORE 关键字)

如果您使用的是 Oracle 数据库,请使用以下命令

从 rowid 不在的表名中删除(从表名组中按 row1、row2、row3 选择 min(rowid).....)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多