要求在 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)
------解决方案--------------------
不用关联吧。试试下面的。
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)
------解决方案--------------------
非想关联的话,用下面的方法进行过滤。
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;
------解决方案--------------------