如何删除重复行但保留一行?

8

mytable表中没有任何列是主键:

姓名 公司 职位
迈克尔 谷歌 测试员
迈克尔 谷歌 测试员
迈克尔 谷歌 测试员
彼得 Facebook 开发人员
彼得 Facebook 开发人员
彼得 Facebook 开发人员
彼得 Facebook 开发人员

我想要的是:

姓名 公司 职位
迈克尔 谷歌 测试员
彼得 Facebook 开发人员

这个方法不起作用:

DELETE FROM
   mytable
WHERE
   Name NOT IN (
      SELECT
         MAX(Name)
      FROM
         mytable
      GROUP BY
         Company
   )
;

没有新建表格,也没有使用CTE,我怎样才能删除除一个之外的重复行?

3个回答

22
你可以选择保留所显示的3个列进行分组后,rowidminmax
delete from myTable
where rowid not in (select min(rowid)
                    from myTable
                    group by name,company,position)

5
SELECT DISTINCT  Name,  Company,  Position 
FROM yourTableName

如果您想删除“重复”的行,可以编写以下代码:

yourTableName - 应该是您真正的数据库表

yourColumn - 应该是您真正的数据库列

DELETE FROM yourTableName
WHERE yourColumn NOT IN (
    SELECT yourColumn 
    FROM yourTableName
    WHERE yourColumn IS NOT NULL
)

-2
希望这个解决方案对你有用:
ALTER IGNORE TABLE `mytable` ADD UNIQUE INDEX (`Name`, `Company`, `Position`);

4
使用错误的语言会导致数据重复,操作失败。 - Brannon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接