首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除保留其他唯一行的重复行?

如何删除保留其他唯一行的重复行?
EN

Stack Overflow用户
提问于 2013-10-06 18:31:03
回答 3查看 132关注 0票数 0

下面是我的表中包含的记录。我想删除所有重复行,结果必须包含ID为50、10、20、30、40的行。

谢谢

代码语言:javascript
运行
复制
50 Engineering    Pune
50 Engineering    Pune
50 Engineering    Pune
50 Engineering    Pune
50 Engineering    Pune
50 Engineering    Pune
50 Engineering    Pune
50 Engineering    Pune
50 Engineering    Pune
10 ACCOUNTING     NEW YORK
20 RESEARCH       DALLAS
30 SALES          CHICAGO
40 OPERATIONS     BOSTON
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-07 06:52:47

oracle中相同行之间的不同之处在于,所有行都具有唯一的rowid,因为您只需按所有列使用rowid的min或max和group,查询如下:

代码语言:javascript
运行
复制
DELETE FROM tableName
WHERE ROWID NOT IN (SELECT MAX (ROWID)
                 FROM   tableName
                 GROUP BY ID, NAME, place
                 );
票数 0
EN

Stack Overflow用户

发布于 2013-10-06 19:42:08

我想我会这么做:

http://sqlfiddle.com/#!4/f0ea9/7

代码语言:javascript
运行
复制
delete example
where rowid in (
    select r_id
    from (
        select 
            rowid r_id, 
            row_number() over(partition by e.dep_id, e.dep_name, e.place order by e.dep_id) rnum
        from example e
    )
    where rnum > 1
);

解析函数row_number() over()确定要删除的行;您希望删除第2行、第3行等等,即rnum > 1。我使用rowid是因为您的桌子上似乎没有主键(这是个好主意吗?)

票数 0
EN

Stack Overflow用户

发布于 2013-10-07 05:19:43

使用MIN(rowid)

代码语言:javascript
运行
复制
DELETE FROM table
 WHERE ROWID NOT IN (SELECT MIN (ROWID)
                     FROM   table
                     GROUP BY ID, NAME, place
                     );

参考这个链接,这将向您展示从表中删除重复数据的不同方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19212366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档