2015-11-04 39 views
1

我有一个查询具有相同DEPTNO找到对ENAME的的:SQL查询找到对谁具有相同DEPTNO员工

SELECT DISTINCT e.ENAME as W1, m.ENAME AS W2 
FROM EMP e 
INNER JOIN emp m ON e.DEPTNO = m.DEPTNO AND e.ENAME != m.ENAME --AND m.ENAME != e.ENAME 
ORDER BY e.ENAME; 

成对不应该是相同的... 如何摆脱像对(只提出一个他们的):

BLAKE <==> WORD 
WORD <==> BLAKE 
+1

使用''而不是'!='。 –

+1

假设'ename'值是唯一的,使用'e.ename> m.ename'。如果它们不是唯一的,但有一个'empno'列是唯一的,并且e.empno!= m.empno和e.ename> m.ename'。当然,使用'm'作为'emp'表的别名,当你不使用它来获取管理器时会有点混乱。 –

+0

好吧,将e改为e1和m到e2 ...需要稍后再分析“>” – mallorn

回答

2

除了使用!=运营商,你可以任意决定把名字(按字典顺序)总是在左边(或者,在右边是cours即但让我们走左边,为参数的缘故):

SELECT  DISTINCT e.ENAME as W1, m.ENAME AS W2 
FROM  EMP e 
INNER JOIN emp m ON e.DEPTNO = m.DEPTNO AND e.ENAME < m.ENAME 
ORDER BY e.ENAME; 
+0

谢谢!对我来说很棘手...... – mallorn