如何从Oracle数据库中删除重复的行?

GIS*_*han 4 sql oracle

我们有一个表,其中有两次相同的数据插入其中意味着大多数(但不是所有)行在表中出现两次.简单地说,我想要一个SQL语句删除一行的一个版本,同时保留另一个版本; 我不介意删除哪个版本,因为它们是相同的.

表结构类似于:

FID,unique_ID,COL3,COL4 ....

Unique_ID是主键,意味着每个键只出现一次. FID是每个功能唯一的密钥,因此如果它出现多次,则应删除重复项.

要选择具有重复项的功能,请执行以下操作:

select count(*) from TABLE GROUP by FID

不幸的是,我无法弄清楚如何从那里删除将删除多余行的SQL删除语句,只留下其中一行.

之前已经问过这类问题,我尝试了不同的创建表,但如何在不命名的情况下获取所有列?这只获取单列FID并将列出的所有列保持为:ORA-00936: missing expression

CREATE TABLE secondtable NOLOGGING as select distinct FID from TABLE

Jus*_*ave 6

如果您不关心保留哪一行

DELETE FROM your_table_name a
 WHERE EXISTS( SELECT 1
                 FROM your_table_name b
                WHERE a.fid = b.fid
                  AND a.unique_id < b.unique_id )
Run Code Online (Sandbox Code Playgroud)

完成后,您将需要向表中添加一个约束,以确保它FID是唯一的.