我们有一个表,其中有两次相同的数据插入其中意味着大多数(但不是所有)行在表中出现两次.简单地说,我想要一个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
如果您不关心保留哪一行
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是唯一的.
| 归档时间: |
|
| 查看次数: |
17570 次 |
| 最近记录: |