oracle distinct后仍有重复记录


selcct distinct a,b,c from table t
where t.b like '%ABC%'

类似于上面的语句,执行后仍然有重复的记录(非一个字段有重复其余两个字段不重复),请教一下为什么distinct会失效?

有时候,它只是看上去一样,实际上不一样,可以用dump函数或者utl_raw.cast_to_raw函数来看它实际存的是什么东西,比如

select  a,b,c,dump(a),dump(b),dump(c) from 
 (
select distinct a,b,c from table t
where t.b like '%ABC%'
)

具体原理可以参考我的两篇文章

【ORACLE】字符串处理小技巧之字符串不可见字符的识别与处理_DarkAthena的博客-CSDN博客 背景有些开发人员在做跨系统传输数据时,偶尔会遇到字符串中包含不可见字符的情况,导致无法在sql的where条件里精确检索这条数据,只能用like模糊查找,比如下面这个数据分析两行中,A列的值看上去是一样的,但是下面这条sql,却只能查出一条记录对比下字符串长度,发现长度不一致稍微有点经验的会说,这不就一个空格、回车或者换行嘛。但是当你用光标上下左右移动去数能移动几次时,发现的确只能数出来3个,多的那个字符是真的"不可见"!它既不是回车也不是换行!用trim函数也无法去除!这个时候,如果 https://darkathena.blog.csdn.net/article/details/122421264

dinstinct a,b,c 保持 a,b,c 不出现重复, 例如 1,1,2 1,1,3 是不重复的 1,1,1 1,1,1 是重复的,就会过滤一条