sql - 需要理解和改进oracle中的以下查询。有人告诉我它会删除重复项。不知道怎么做?
问题描述
delete from
location_in a
where
a.rowid >
any (
select
B.rowid
from
location_in b
where
A.location_id = B.location_id);
commit;
解决方案
如果您不理解 delete 语句,请尝试更改delete
toselect *
并运行它以查看它找到了哪些行。
这是编写相同语句的另一种方法。也许这会更清楚?
delete from
location_in A
where
EXISTS (select 'this is a duplicate'
from location_in B
where A.location_id = B.location_id
and A.rowid > B.rowid);
如果有多个location_in
相同的行location_id
,这将删除其中任何一个高于rowid
其他行的 - 这将只留下一行,即最低的一行rowid
。
推荐阅读
- laravel - 使用旧版本 laravel 创建新项目时出错。我该怎么办?
- python - TF-Agents 错误:TypeError:两个结构不匹配:Trajectory vs. Trajectory
- vue.js - 如何使用 Nuxt 中间件重定向到外部站点?
- firebase - 如何从 Firebase 存储中检索视频?科特林
- leveldb - leveldb 禁用或阻止日志文件
- python - 在方法中缺少 1 个必需的位置参数
- drupal - 我可以为视图设置动态参数吗?
- linux - Pacemaker IPaddr2 资源 - 无法从接口中删除 IP
- ruby-on-rails - 罗尔。宝石法拉第。如何重新发送带有正文的帖子查询
- android - Android:SQL Server以编程方式检查登录详细信息