如何去除重复的查询结果

GeBron 2014-04-13 11:04:37
要求在 emp 表中找出 sal 相同的员工,我是这个写的:

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

结果是这样的:

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

谢谢~
...全文
272 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
善若止水 2014-04-29
  • 打赏
  • 举报
回复
select e1.ename, e2.ename, e1.sal from emp e1, emp e2 where e1.sal = e2.sal and e1.empno< e2.empno
这个是不是重复的,因为用了小于操作符,就不会有冗余了,这刚好是我最近看“SQL.Cookbook中文版.pdf”的一个收获
yuyeyi 2014-04-28
  • 打赏
  • 举报
回复

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

;
WSZHAO_SELECT 2014-04-24
  • 打赏
  • 举报
回复

select a.ename, b.ename, a.sal
from emp a, emp b
where a.sal = b.sal
and a.ename < b.ename
简单还能满足需求
zyjj_99 2014-04-23
  • 打赏
  • 举报
回复
楼上都是好方法
rabitsky 2014-04-23
  • 打赏
  • 举报
回复
如果ename同列的话,感觉会比ename分开要好

select sal, wmsys.wm_concat(ename) ename
from emp a
where exists
(select sal
from emp b
where b.sal = a.sal
group by sal
having count(1) >= 2)
group by sal;


rabitsky 2014-04-23
  • 打赏
  • 举报
回复
这个其实很简单,一个简单的SQL就搞定了,但前提是没有两个重名的员工。

select a.ename, b.ename, a.sal
from emp a, emp b
where a.sal = b.sal
and a.ename < b.ename

IWE 2014-04-23
  • 打赏
  • 举报
回复
select sal, wmsys.wm_concat(ename) ename from emp a where exists (select sal from emp b where b.sal = a.sal group by sal having count(1) >= 2) group by sal;
houdi2108 2014-04-14
  • 打赏
  • 举报
回复
select * from emp e where sal in (select sal from emp group by sal having count (sal)>1)
流浪川 2014-04-14
  • 打赏
  • 举报
回复
引用 楼主 GeBron 的回复:
要求在 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;
流浪川 2014-04-14
  • 打赏
  • 举报
回复
引用 楼主 GeBron 的回复:
要求在 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)
CT_LXL 2014-04-13
  • 打赏
  • 举报
回复
引用 楼主 GeBron 的回复:
要求在 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;
SKY_4K_PPM 2014-04-13
  • 打赏
  • 举报
回复
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

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧