【发布时间】:2018-12-13 18:23:31
【问题描述】:
如果我这样做,我会得到结果,但我只想用连接来做。
SELECT DNAME, LOC, D.DEPTNO
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND MGR IN (SELECT MGR FROM EMP GROUP BY MGR HAVING COUNT(*) > 1);
【问题讨论】:
如果我这样做,我会得到结果,但我只想用连接来做。
SELECT DNAME, LOC, D.DEPTNO
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND MGR IN (SELECT MGR FROM EMP GROUP BY MGR HAVING COUNT(*) > 1);
【问题讨论】:
首先,你最好使用 ANSI-92 JOIN 语法,而不是老式的逗号分隔格式。
这个查询
SELECT DNAME, LOC, D.DEPTNO
FROM EMP E
JOIN DEPT D ON E.DEPTNO = D.DEPTNO
JOIN (SELECT MGR FROM EMP GROUP BY MGR HAVING COUNT(*) > 1) EE ON E.MGR = EE.MGR ;
和你的一样。但是如果你不想返回重复的行,这个
SELECT DNAME, LOC, D.DEPTNO
FROM EMP E
JOIN DEPT D ON E.DEPTNO = D.DEPTNO
GROUP BY DNAME, LOC, D.DEPTNO
HAVING COUNT(*) > 1;
可能是首选。
【讨论】: