如何从表中删除重复值 [重复]

Posted

技术标签:

【中文标题】如何从表中删除重复值 [重复]【英文标题】:How to Remove Duplicates Values from table [duplicate] 【发布时间】:2019-12-08 08:38:51 【问题描述】:

我有一个包含三列 id、用户名和视频的 SQL 表,我需要一个 SQL 查询来删除所有重复项,谢谢

表SS链接https://ibb.co/wC4p7kS

【问题讨论】:

【参考方案1】:

由于您的屏幕截图是 phpMyAdmin,我假设我们在这里讨论的是 mysql(在提问时,这是有用的信息,因为各种 SQL 方言有不同的工具可以使用)。

如果您的结果中不需要id,您可以使用DISTINCT

SELECT
  DISTINCT
    Username,
    Video
FROM
  YourTableName

这会返回一个不同行的列表(这意味着它会考虑所有列来确定什么是不同的,这就是为什么在此处包含 id 不起作用的原因)。

如果您确实需要返回 ID,则必须使用 GROUP BY

SELECT
  MIN(id) AS id,
  Username,
  Video
FROM
  YourTableName
GROUP BY
  Username,
  Video

显然,您可以从那里选择一个不同的 ID(例如MAX(id)),或者您可以使用GROUP_CONCAT 选择一个 ID 列表(例如GROUP_CONCAT(id ORDER BY id ASC) AS id,默认情况下会给您一个逗号分隔的列表除非你改变它)

也可以使用窗口/分析函数来完成,这可以是非常大表中的值。

注意:当您说“删除所有重复项”时,我假设您的意思是您的结果。如果你的意思是从表中删除它们,你可以使用这个:

DELETE FROM
  YourTableName
WHERE
  id NOT IN(SELECT MIN(id) FROM YourTableName GROUP BY Username,Video)

【讨论】:

以上是关于如何从表中删除重复值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从表中列出重复值? [复制]

在Oracle中从表中删除重复行

从表中的多个重复项中删除特定记录

选择查询以从表中查找重复值 [重复]

如何从表中一次选择相等的值[重复]

如何从表中删除某些行?