sql - 从 Oracle 数据库中的子查询中删除结果
问题描述
我搞砸了一个数据库表,现在里面有多个重复项。现在我想删除所有重复项。我通过以下查询找到了它们:
select order_uuid, changed_at, count(*)
from mobisl_1.t_order_states
group by order_uuid, changed_at
having count (*) > 1;
重复项由“order_uuid”和“changed_at”列定义。如果两者的组合在表中出现多次,则将其定义为重复。
我得到一个 904 行的结果集。结果集如我所料。现在我想删除那些重复的
delete from mobisl_1.t_order_states
where ORDER_UUID in (
select order_uuid, changed_at, count(*)
from mobisl_1.t_order_states
group by order_uuid, changed_at
having count (*) > 1
);
然后 Oracle 显示错误 ORA-00913:值太多。我可以在这里做什么?我已经尝试使用某些条件(仅获取日期低于 x 的行)来限制结果集的大小,但没有得到肯定的结果。
解决方案
您的问题的答案是使用元组并count(*)
从以下内容中删除select
:
delete
from mobisl_1.t_order_states
where (ORDER_UUID, changed_at) in
(select order_uuid, changed_at
from mobisl_1.t_order_states
group by order_uuid, changed_at
having count(*) > 1
);
这回答了您提出的问题。但是,我认为这不是您真正想要做的。通常,我想保留其中一行重复的行。
如果您想保留其中一行,那么要么做一些研究,要么问另一个问题。
推荐阅读
- javascript - 单击 div 时更改 div 文本和 CSS,并在再次单击时反转更改
- kubernetes - 服务帐户的最佳做法是什么?
- c# - 'Cannot put Window in Style' 错误,即使视图位于 DataTemplate 中
- protractor - 无法读取量角器中的表格元素
- r - 根据 R 中的查找值将值分配给不同的列
- javascript - 从 url 解析 json 文件的 javascript botton 不起作用
- node.js - 协会不适用于 Sequelize
- c# - 低效的 LINQ - 知道 SQL 应该是什么 - 无法到达那里
- django - 从用户数据库中选择模型字段
- php - Laravel 中带有或不带有正斜杠的路线?