今天下午隔壁公司的一个人说一张表一个主键,两个字段合并为唯一键。插入一直报违反唯一性约束, 后来我为其写了一个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语句似乎无法完成这项任务。 |
|
来自: 昵称18846148 > 《ORACLE》