DELETE FROM TABLE WHERE ROWID NOT IN
(SELECT MAX(rowID) FROM TABLE GROUP BY NEWCODE)
解释:
1:SELECT MAX(rowID) FROM TABLE GROUP BY NEWCODE,按照新的字段(newcode)分组;
2:然后查找分组后的rowId,其中rowId可以为MIN(rowId)或MAX(rowId);
3:DELETE FROM TABLE WHERE ROWID NOT IN (SELECT MAX(rowID) FROM TABLE GROUP BY NEWCODE) 进行删除重复记录
4:该语句执行效果:当newCode中有一列属性有重复值时,就会删除;
5:游标是对多行数据结果的一个操作入口,通过遍历游标,我们可以对访问到每行记录的数据,并通过游标取出值,从而进行操作。当select出多行结果集时就会用到cousor.不过游标的缺点就是消耗资源。
项目中遇到的实际问题
declare
v_sql varchar2(4000);
v_table varchar2(4000);
cursor CUR_DETAILID is
select tname from tab where tname like 'X\_%' escape '\';
begin
delete from C_DETAIL_FEATURE_RE;
open CUR_DETAILID;
loop
fetch CUR_DETAILID
into v_table;
exit when CUR_DETAILID%notfound;
v_sql := 'insert into C_DETAIL_FEATURE_RE select S_C_DETAIL_FEATURE_RE.NEXTVAL,D_DETAILID,D_FNO,D_FID FROM ' ||
v_table;
dbms_output.put_line(v_sql);
execute immediate v_sql;
commit;
end loop;
close CUR_DETAILID;
----去除重复
delete from C_DETAIL_FEATURE_RE
where rowid not in (select max(rowid)
from C_DETAIL_FEATURE_RE
group by (d_fid, d_detailid, d_fno));
commit;
end;
Oracle 删除重复记录
猜你喜欢
转载自840536410.iteye.com/blog/1980929
今日推荐
周排行