当前位置: 代码迷 >> Oracle管理 >> 怎么去除重复的查询结果
  详细解决方案

怎么去除重复的查询结果

热度:40   发布时间:2016-04-24 04:17:55.0
如何去除重复的查询结果
要求在 emp 表中找出 sal 相同的员工,我是这个写的:

select e1.ename, e2.ename, e1.sal from emp e1, emp e2 where e1.sal = e2.sal and e1.ename != e2.ename;

结果是这样的:

很明显这里有两个结果是重复的,请问如何去掉这两个结果?

谢谢~
------解决方案--------------------
引用:
要求在 emp 表中找出 sal 相同的员工,我是这个写的:

select e1.ename, e2.ename, e1.sal from emp e1, emp e2 where e1.sal = e2.sal and e1.ename != e2.ename;

结果是这样的:

很明显这里有两个结果是重复的,请问如何去掉这两个结果?

谢谢~


select *
  from (select e1.ename,
               decode(e1.sal,
                      lead(e1.sal) over(order by e1.sal),
                      lead(e1.ename) over(order by e1.sal),
                      null) ename2,
               e1.sal
          from scott.emp e1, scott.emp e2
         where e1.sal = e2.sal
           and e1.ename != e2.ename)
 where ename2 is not null;

------解决方案--------------------
select e1.ename,e1.sal
from emp e1,emp e2
where e1.ename!=e2.ename and e1.sal=e2.sal
order by e1.sal asc
------解决方案--------------------
select * from emp e where sal in (select sal from emp group by sal having count (sal)>1)

------解决方案--------------------
引用:
要求在 emp 表中找出 sal 相同的员工,我是这个写的:

select e1.ename, e2.ename, e1.sal from emp e1, emp e2 where e1.sal = e2.sal and e1.ename != e2.ename;

结果是这样的:

很明显这里有两个结果是重复的,请问如何去掉这两个结果?

谢谢~

不用关联吧。试试下面的。
select regexp_substr(enames, '[^,]+', 1, 1) ename1,
       regexp_substr(enames, '[^,]+', 1, 2) ename2
  from (select wmsys.wm_concat(ename) enames
          from scott.emp
         group by sal
        having count(1) > 1)

------解决方案--------------------
引用:
要求在 emp 表中找出 sal 相同的员工,我是这个写的:

select e1.ename, e2.ename, e1.sal from emp e1, emp e2 where e1.sal = e2.sal and e1.ename != e2.ename;

结果是这样的:

很明显这里有两个结果是重复的,请问如何去掉这两个结果?

谢谢~

非想关联的话,用下面的方法进行过滤。
select distinct (case
                  when e1.ename > e2.ename then
                   e2.ename
                  else
                   e1.ename
                end),
                (case
                  when e1.ename > e2.ename then
                   e1.ename
                  else
                   e2.ename
                end),
                e1.sal
  from scott.emp e1, scott.emp e2
 where e1.sal = e2.sal
   and e1.ename != e2.ename;

------解决方案--------------------
  相关解决方案