Oracle中distinct的用法实例以及Oracle distince 用法和删除重复
Oracle中distinct的用法实例distinct的只显示一次重复出更的值。 不过这个值出现多少次只显示一次。 select distinct 字段名1,字段名2 from 表格 order by 字段名1 distinct 字段名1 意思是只显示一次字段名1显示的是第一次出现的。 最好和order by 结合使用。可以提高效率 distinct 返回唯一的结果集 注意,是结果集,如果你选了N个字段,当N个字段都相同时 才会被视为相同,而只返加一个 当然,如果N=1的话,情况就会比较明显 此外,distinct 会对返回的结果集进行排序 所以会大大影响查询效率,大数据集时比较明显,所以,最好和order by 结合使用,可以提高效率。 select distinct hjrq from T_MIDDLE_HJCG order by hjrq asc 增序 默认 desc 降序 [@more@] selectdistincta,b,c from t;表t里列的顺序为c,a,b ,则distinct排序时是按前者还是后者来呢?
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。 下面先来看看例子: table表 字段1 字段2 表结构大概这样,这只是一个简单的例子,实际情况会复杂得多。 比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。 select distinct name from table ———- name 好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧: select distinct name,id from table 结果会是: id name distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除。。。。。。。 我们再改改查询语句: select id,distinct name from table 很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,但是照样会报错。 ———————————————————————————————————— 下面方法可行: select *,count(distinct name) from table group by name 结果: id name count(distinct name) 最后一项是多余的,不用管就行了,目的达到。。。。。 group by 必须放在 order by 和 limit之前,不然会报错 =========================================================== 另一篇网上转载的博文: Oracledistince 用法和删除重复数据 oracle distinct语句的用法 创建视图时过滤数据 Oracle 中如何删除重复数据 我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据重复,那么,如何对重复的数据进行删除呢? 一、对于部分字段重复数据的删除 这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。 随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。 二、对于完全重复记录的删除 对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录: 如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从 临时表将数据导入正式表中,如下: INSERT INTO t_table_bak select distinct * from t_table; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |