ORACLE中取出表中按照某字段排序的前N条记录,再把这前N条记录删除?

wenli83 2008-10-17 10:59:33
取出表中按照某字段排序的前N条记录,然后要把这前N条记录删除
如何实现?
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sleepzzzzz 2008-10-17
  • 打赏
  • 举报
回复
好代码啊.

[Quote=引用 2 楼 oracledbalgtu 的回复:]
DELETE FROM T
WHERE ROWID IN
(SELECT ROWID
FROM (SELECT ROWID, ROW_NUMBER() OVER(ORDER BY COLX) RN FROM T)
WHERE RN <= 10);


引用楼主 wenli83 的帖子:
取出表中按照某字段排序的前N条记录,然后要把这前N条记录删除
如何实现?
[/Quote]
hyrongg 2008-10-17
  • 打赏
  • 举报
回复

SQL> select * from t;

IDX CNAME
--------------------------------------- ------------------------------
1 a
2 b
3 c
4 d
5 e

SQL>
SQL> delete from t where idx in(
2 select * from (
3 select idx from t order by idx desc
4 ) a where rownum<=2
5 );

2 rows deleted

SQL> select * from t;

IDX CNAME
--------------------------------------- ------------------------------
1 a
2 b
3 c

wenli83 2008-10-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oracledbalgtu 的回复:]
DELETE FROM T
WHERE ROWID IN
(SELECT ROWID
FROM (SELECT ROWID, ROW_NUMBER() OVER(ORDER BY COLX) RN FROM T)
WHERE RN <= 10);


引用楼主 wenli83 的帖子:
取出表中按照某字段排序的前N条记录,然后要把这前N条记录删除
如何实现?
[/Quote]
我试试
oracledbalgtu 2008-10-17
  • 打赏
  • 举报
回复
DELETE FROM T
WHERE ROWID IN
(SELECT ROWID
FROM (SELECT ROWID, ROW_NUMBER() OVER(ORDER BY COLX) RN FROM T)
WHERE RN <= 10);


[Quote=引用楼主 wenli83 的帖子:]
取出表中按照某字段排序的前N条记录,然后要把这前N条记录删除
如何实现?
[/Quote]
mantisXF 2008-10-17
  • 打赏
  • 举报
回复
ORDER BY FIELD  ->  WHERE ROWNUM <= N  ->  DELETE
[Quote=引用楼主 wenli83 的帖子:]
取出表中按照某字段排序的前N条记录,然后要把这前N条记录删除
如何实现?
[/Quote]

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧