从Oracle数据库中的子查询删除结果

时间:2019-03-14 08:52:39

标签: sql oracle oracle11g

我弄乱了一个数据库表,现在其中有多个重复项。现在,我要删除所有重复项。我通过以下查询找到了它们:

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的行),但没有任何积极结果。

1 个答案:

答案 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
         );

这回答了您提出的问题。但是,我不认为这是您真正想要做的。通常,我会希望其中的 行与重复项保持一致。

如果您要保留其中一行,请进行一些研究或提出另一个问题。