【发布时间】:2014-02-03 17:18:20
【问题描述】:
我有一个 Person 表,其中插入了具有不同 ID 的重复人员。我想删除具有重复姓名的人,只保留具有最小 ID 的人。 例如,ID 为 18398 的 Absalon 记录应保留,所有其他重复项均被删除。
【问题讨论】:
标签: sql oracle11g duplicates duplicate-removal
我有一个 Person 表,其中插入了具有不同 ID 的重复人员。我想删除具有重复姓名的人,只保留具有最小 ID 的人。 例如,ID 为 18398 的 Absalon 记录应保留,所有其他重复项均被删除。
【问题讨论】:
标签: sql oracle11g duplicates duplicate-removal
DELETE FROM persons WHERE id NOT IN (SELECT MIN(id) FROM persons GROUP BY name)
【讨论】:
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
mysql 标记的新问题,因为这个问题与mysql 无关,而且每种SQL 方言都不同。
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
【讨论】: