我在Oracle中测试了一些东西,并用一些示例数据填充了一个表,但是在这个过程中,我意外地加载了重复的记录,所以现在我不能使用一些列创建主键。
如何删除所有重复的行并只保留其中的一行?
发布于 2009-02-09 17:41:15
使用rowid
伪列。
DELETE FROM your_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM your_table
GROUP BY column1, column2, column3);
其中,column1
、column2
和column3
构成了每条记录的标识键。您可以列出所有列。
发布于 2011-03-18 14:11:43
来自Ask Tom
delete from t
where rowid IN ( select rid
from (select rowid rid,
row_number() over (partition by
companyid, agentid, class , status, terminationdate
order by rowid) rn
from t)
where rn <> 1);
(修复了漏掉的括号)
发布于 2009-02-09 17:43:53
来自DevX.com
DELETE FROM our_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM our_table
GROUP BY column1, column2, column3...) ;
其中column1、column2等是您要使用的密钥。
https://stackoverflow.com/questions/529098
复制相似问题