Welcome 微信登录

首页 / 数据库 / MySQL / Oracle distinct关键字过滤重复记录详解

distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。下面先来看看例子:table表字段1     字段2
   id        name
   1           a
   2           b
   3           c
   4           c
   5           b库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。select distinct name from table
得到的结果是: ---------- name
   a
   b
   c好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:select distinct name, id from table结果会是:---------- id name
   1 a
   2 b
   3 c
   4 c
   5 bdistinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得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)
   1 a 1
   2 b 1
   3 c 1最后一项是多余的,不用管就行了,目的达到。。。。。group by 必须放在 order by 和 limit之前,不然会报错==============以上是关于Oracle的distinct的一种用法==============用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低。select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录
所以用distinct达不到想要的效果,用group by   可以解决这个问题。 Oracle教程:手工添加RAC第三个节点Oracle去除重复记录 不用distinct 支持hibernate相关资讯      oracle 
  • [INS-32052] Oracle基目录和Oracle  (07/22/2014 07:41:41)
  • Oracle 4个大对象(lobs)数据类型  (02/03/2013 12:33:05)
  • Oracle按时间段分组统计  (07/26/2012 10:36:48)
  • [Oracle] dbms_metadata.get_ddl的  (07/12/2013 07:37:30)
  • Liferay Portal 配置使用Oracle和  (07/31/2012 20:07:18)
  • Concurrent Request:Inactive   (07/20/2012 07:44:05)
本文评论 查看全部评论 (0)
表情: 姓名: 字数