DELETE 语句的日常用法讲得挺到位的,尤其是针对ROWID
去重那段,思路清晰,代码也不复杂。你如果经常跟ORACLE
打交道,这篇小教程还蛮值得收藏的。
DELETE 的标准语法写得比较基础,直接来个例子:DELETE FROM SCOTT.BONUS WHERE ENAME = 'CLARK'
,这类操作日常挺常见,别忘了加WHERE
,不然一锅端哦。
ROWID 去重这块是亮点,思路是:保留ROWID
最大的那条,其它的删掉。举个例子:
DELETE FROM SCOTT.BONUS B
WHERE ROWID < (
SELECT MAX(ROWID)
FROM SCOTT.BONUS
WHERE BONUS.ENAME = B.ENAME
GROUP BY ENAME
HAVING COUNT(*) > 1
);
逻辑还挺巧,用ROWID
做唯一标识,这在 Oracle 里还蛮常用的。
你要是想进一步理解ROWID
或搞清楚怎么查重、去重,下面这些扩展文章也都挺有料的:
- 消除表中重复记录
- Oracle SQL 查询表中的重复记录
- SQL 查询重复记录方法总结
- DISTINCT 短语去除重复记录
- 从数据库结果集中消除重复记录的方法
- 消除重复数据记录
- 删除 emp_no 重复的记录仅保留最小 id 对应的记录
- ORACLE 执行计划和 SQL 调优中的 Rowid 概念
- Oracle 标准库函数 DBMS_ROWID 使用指南
如果你平时维护Oracle
数据库、又老遇上表里重复数据的问题,可以收藏这篇教程,操作思路挺实用。