我弄乱了一个数据库表,现在其中有多个重复项。现在,我要删除所有重复项。我通过以下查询找到了它们:
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的行),但没有任何积极结果。
答案 0 :(得分:0)
您问题的答案是使用元组并从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
);
这回答了您提出的问题。但是,我不认为这是您真正想要做的。通常,我会希望其中的 行与重复项保持一致。
如果您要保留其中一行,请进行一些研究或提出另一个问题。