分享

ORACLE 去重 漏数据

 昵称18846148 2014-08-08
今天下午隔壁公司的一个人说一张表一个主键,两个字段合并为唯一键。插入一直报违反唯一性约束,
后来我为其写了一个sql语句
bm 主键
name||sex 唯一键
语句如下
select m.bm, m.name, m.sex
    from (select *
            from (select t.*,
                         row_number() over(partition by bm order by bm desc) cn
                    from T_GH_UNIQUE_KEY_140808 t)
           where cn = 1) m
   where m.rowid in (select min(s.rowid)
                       from T_GH_UNIQUE_KEY_140808 s
                      group by name || sex) ;
模拟数据如下:



执行上述sql语句发现只有

说明此sql语句不对,分析此sql语句执行计划


执行计划并不会怎么看。

不过可以分成三部分:
1 select min(s.rowid)
                       from T_GH_UNIQUE_KEY_140808 s
                      group by name || sex





执行
2、



3、现在两个结果进行匹配只有两个结果

这种写法不对,可是如果不这样子的写的话,如何找出最应该存在的数据呢?或者说去重并不能完全保证我们需要得到数据出现。

???
应该这样子理解,去重,首先需要将完全相同的只取其一,其次根据业务数据分析
下面是我的步骤。

select *
            from (select t.*,
                         row_number() over(partition by bm||name||sex order by bm||name||sex desc) cn
                    from T_GH_UNIQUE_KEY_140808 t)
           where cn = 1


又回到之前的问题上去了。感觉这是一个无解?

按照自己的思考他要出来四种才算通过 


可是sql语句似乎无法完成这项任务。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多