sql - 如何让员工和他们的经理在一起

标签 sql oracle sqlplus

这就是我希望输出的样子:

Employee   Emp# Manager Mgr# 
   BLAKE   7698 KING    7839 
   CLARK   7782 KING    7839 
   JONES   7566 KING    7839 
   MARTIN  7654 BLAKE   7698 
   ALLEN   7499 BLAKE   7698 
   TURNER  7844 BLAKE   7698 
   JAMES   7900 BLAKE   7698 
   WARD    7521 BLAKE   7698 
   FORD    7902 JONES   7566 
   SMITH   7369 FORD    7902 
   SCOTT   7788 JONES   7566 
   ADAMS   7876 SCOTT   7788 
   MILLER  7934 CLARK   7782 

这是我得到的:
 SQL> SELECT ename, empno, (SELECT ename FROM EMP WHERE empno = mgr)AS MANAGER, mgr from emp order by empno;

 ENAME           EMPNO MANAGER           MGR
 ---------- ---------- ---------- ----------
 SMITH            7369                  7902
 ALLEN            7499                  7698
 WARD             7521                  7698
 JONES            7566                  7839
 MARTIN           7654                  7698
 BLAKE            7698                  7839
 CLARK            7782                  7839
 SCOTT            7788                  7566
 KING             7839
 TURNER           7844                  7698
 ADAMS            7876                  7788

 ENAME           EMPNO MANAGER           MGR
 ---------- ---------- ---------- ----------
 JAMES            7900                  7698
 FORD             7902                  7566
 MILLER           7934                  7782

我找不到为什么经理字段是空白的。

这是表:
 SQL> select empno, ename, job,deptno, mgr from emp;

 EMPNO ENAME      JOB           DEPTNO        MGR
 ---------- ---------- --------- ---------- ----------
  7839 KING       PRESIDENT         10
  7698 BLAKE      MANAGER           30       7839
  7782 CLARK      MANAGER           10       7839
  7566 JONES      MANAGER           20       7839
  7654 MARTIN     SALESMAN          30       7698
  7499 ALLEN      SALESMAN          30       7698
  7844 TURNER     SALESMAN          30       7698
  7900 JAMES      CLERK             30       7698
  7521 WARD       SALESMAN          30       7698
  7902 FORD       ANALYST           20       7566
  7369 SMITH      CLERK             20       7902

 EMPNO ENAME      JOB           DEPTNO        MGR
 ---------- ---------- --------- ---------- ----------
  7788 SCOTT      ANALYST           20       7566
  7876 ADAMS      CLERK             20       7788
  7934 MILLER     CLERK             10       7782

已选择 14 行。

最佳答案

这是一个经典的自连接,请尝试以下操作:

SELECT e.ename, e.empno, m.ename as manager, e.mgr
FROM
    emp e, emp m
WHERE e.mgr = m.empno

如果你想包括没有经理的总统,那么在 Oracle 语法中使用外连接而不是内连接:
SELECT e.ename, e.empno, m.ename as manager, e.mgr
FROM
    emp e, emp m
WHERE e.mgr = m.empno(+)

或者在 ANSI SQL 语法中:
SELECT e.ename, e.empno, m.ename as manager, e.mgr
FROM
    emp e
    LEFT OUTER JOIN emp m
        ON e.mgr = m.empno

关于sql - 如何让员工和他们的经理在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451761/

相关文章:

mysql - 无法添加或更新子行: a foreign key constraint fails

oracle - 查询以显示数据库和数据文件中的所有表空间

Oracle 审计授予 dba 角色

sql - 寻找最常点击的人

php - 无法在PHP页面创建的shell脚本中执行sqlplus命令

mysql - 带连接的 SQL 查询仅选择 1 行

sql - 表基数

甲骨文 : Grant Create table in another schema?

powershell - 从PowerShell执行SQL * Plus

mysql - 一对多关系,选择值