下面是我的表中包含的记录。我想删除所有重复行,结果必须包含ID为50、10、20、30、40的行。
谢谢
50 Engineering Pune
50 Engineering Pune
50 Engineering Pune
50 Engineering Pune
50 Engineering Pune
50 Engineering Pune
50 Engineering Pune
50 Engineering Pune
50 Engineering Pune
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
发布于 2013-10-07 06:52:47
oracle中相同行之间的不同之处在于,所有行都具有唯一的rowid,因为您只需按所有列使用rowid的min或max和group,查询如下:
DELETE FROM tableName
WHERE ROWID NOT IN (SELECT MAX (ROWID)
FROM tableName
GROUP BY ID, NAME, place
);
发布于 2013-10-06 19:42:08
我想我会这么做:
http://sqlfiddle.com/#!4/f0ea9/7
delete example
where rowid in (
select r_id
from (
select
rowid r_id,
row_number() over(partition by e.dep_id, e.dep_name, e.place order by e.dep_id) rnum
from example e
)
where rnum > 1
);
解析函数row_number() over()
确定要删除的行;您希望删除第2行、第3行等等,即rnum > 1
。我使用rowid是因为您的桌子上似乎没有主键(这是个好主意吗?)
发布于 2013-10-07 05:19:43
使用MIN(rowid)
DELETE FROM table
WHERE ROWID NOT IN (SELECT MIN (ROWID)
FROM table
GROUP BY ID, NAME, place
);
参考这个链接,这将向您展示从表中删除重复数据的不同方法。
https://stackoverflow.com/questions/19212366
复制相似问题