首页 > 解决方案 > 需要理解和改进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;

标签: sqloracle

解决方案


如果您不理解 delete 语句,请尝试更改deletetoselect *并运行它以查看它找到了哪些行。

这是编写相同语句的另一种方法。也许这会更清楚?

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


推荐阅读