【问题标题】:How do I delete duplicity rows without PK? (normal select, disctint select) [duplicate]如何在没有 PK 的情况下删除重复行? (正常选择,不同选择)[重复]
【发布时间】:2013-07-23 22:48:25
【问题描述】:

情况是这样的

select name,surname,address from myTable -- returns 150rows

select distinct name, surname, address from myTable -- returns 60rows

比方说,我不能用 PK 操作。如何删除重复的行?

select name,surname,address from myTable
MINUS
select distinct name, surname,address from myTable

不工作...减去删除所有内容

感谢您的建议

【问题讨论】:

  • 在我之后重复:“以我作为数据库开发人员和用户的荣誉,我发誓/肯定/承诺我将永远,永远,永远在我创建的每个表上定义一个主键 - 即使我'我太聪明了,我只是知道这一次我真的不需要一个 - 所以帮助我 Codd”。

标签: sql oracle plsql sqlplus


【解决方案1】:

请尝试:

delete FROM 
   myTable A
WHERE 
  a.rowid > 
   ANY (
     SELECT 
        B.rowid
     FROM 
        myTable B
     WHERE 
        A.name = B.name AND
        A.surname=B.surname AND
        A.address=B.address
        ); 

注意:我还没有测试过。

【讨论】:

  • 测试 DELETE - 查询被高估了! ;)
  • 是的... :) 没错!但我从一个工作示例中提出了这个查询。
【解决方案2】:

新表怎么样?

create myTable2 as (select distinct name, surname, address from myTable);
drop myTable;

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2015-03-04
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多