【问题标题】:Deleting duplicates keeping the minimum ID删除重复项保持最小 ID
【发布时间】:2014-02-03 17:18:20
【问题描述】:

我有一个 Person 表,其中插入了具有不同 ID 的重复人员。我想删除具有重复姓名的人,只保留具有最小 ID 的人。 例如,ID 为 18398 的 Absalon 记录应保留,所有其他重复项均被删除。

【问题讨论】:

标签: sql oracle11g duplicates duplicate-removal


【解决方案1】:

DELETE FROM persons WHERE id NOT IN (SELECT MIN(id) FROM persons GROUP BY name)

【讨论】:

  • mysql Ver 14.14 Distrib 5.5.52 出现错误:mysql> delete from domain_map where id not in (select min(id) from domain_map group by domain); ERROR 1093 (HY000): You can't specify target table 'domain_map' for update in FROM clause
  • @abatie 请提出一个带有mysql 标记的新问题,因为这个问题与mysql 无关,而且每种SQL 方言都不同。
  • @abatie 或者你可能想看看stackoverflow.com/questions/6471463/…
  • 我不是在问问题——我是在指出答案不起作用,至少在这个特定版本的 mysql 中不起作用。
【解决方案2】:
WITH duplicatable As
( SELECT *, ROW_NUMBER() OVER( PARTITION BY name, ORDER BY id ASC ) as row_number FROM table_name
)
SELECT * FROM duplicatable WHERE row_number > 1

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2017-10-22
    • 2020-12-19
    • 2011-08-31
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多