관리자와 직원을 연결하는 방법
이것이 제가 원하는 출력의 모습입니다.
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
(SELECT ename FROM EMP WHERE empno = mgr)
EMP에는 이 기준을 충족하는 기록이 없습니다.
이 관계를 얻으려면 자기 참여를 해야 합니다.
SELECT e.ename AS Employee, e.empno, m.ename AS Manager, m.empno
FROM EMP AS e LEFT OUTER JOIN EMP AS m
ON e.mgr =m.empno;
편집:
당신이 선택한 답변은 내부 합류이기 때문에 당신의 회장을 나열하지 않을 것입니다.결과물이 숙제에 필요한 것이 아니라는 것을 알게 되면 돌아올 것이라고 생각합니다.실제 테스트 사례는 다음과 같습니다.
> select * from emp;
empno | ename | job | deptno | mgr
-------+-------+-----------+--------+------
7839 | king | president | 10 |
7698 | blake | manager | 30 | 7839
(2 rows)
> SELECT e.ename employee, e.empno, m.ename manager, m.empno
FROM emp AS e LEFT OUTER JOIN emp AS m
ON e.mgr =m.empno;
employee | empno | manager | empno
----------+-------+---------+-------
king | 7839 | |
blake | 7698 | king | 7839
(2 rows)
다른 점은 외부 조인이 모든 행을 반환한다는 것입니다.내부 조인은 다음을 생성합니다.
> SELECT e.ename, e.empno, m.ename as manager, e.mgr
FROM emp e, emp m
WHERE e.mgr = m.empno;
ename | empno | manager | mgr
-------+-------+---------+------
blake | 7698 | king | 7839
(1 row)
쿼리를 다음과 같이 변경할 수도 있었습니다.
SELECT ename, empno, (SELECT ename FROM EMP WHERE empno = e.mgr)AS MANAGER, mgr
from emp e
order by empno;
이는 엔진이 내부 빈 공간의 경우 외부 테이블의 mgr 열과 empno를 일치시켜야 함을 의미합니다.
먹어보기
SELECT E.ename,E.empno,ISNULL(E.ename,'NO MANAGER') AS MANAGER FROM emp e
INNER JOIN emp M
ON M.empno=E.empno
하위 쿼리 대신 자체 조인 사용
아마도 당신의 서브쿼리.(SELECT ename FROM EMP WHERE empno = mgr)
생각합니다. 자신의 관리자인 직원 기록을 주세요! (즉, 행의 엠노가 동일한 행의 엠지알과 동일한 경우.
내부 결합을 사용하기 위해 이 글을 다시 쓰는 것을 고려해 보셨습니까?(다음 사항들이 효과가 있을지도 확신할 수 없기 때문에 묻습니다.)
SELECT t1.ename, t1.empno, t2.ename as MANAGER, t1.mgr
from emp as t1
inner join emp t2 ON t1.mgr = t2.empno
order by t1.empno;
다음은 이 질문에 대한 대체 답변입니다. 셀프 조인을 사용하는 대신 '계층적 쿼리' 옵션을 선택할 수 있습니다.빠르고 조인에 비해 여러 장점이 있습니다.
SELECT ename as employee, empno, prior ename as manager, prior empno as mgrno
FROM emp
start with mgr is null
connect by mgr = prior empno;
언급URL : https://stackoverflow.com/questions/7451761/how-to-get-the-employees-with-their-managers
'programing' 카테고리의 다른 글
포함 범위에서 임의 부동 소수점 두 배 (0) | 2023.10.09 |
---|---|
mysqlworkbench를 사용하여 테이블 구조만 내보내기 (0) | 2023.10.09 |
영향을 받는 Oracle JDBC batchUpdate 행은 항상 -2(문)입니다.SUCCESS_NO_INFO) (0) | 2023.10.09 |
ODP(Oracle에 Array/Table Parameter를 사용하는 방법)ADO를 통해 NET 10g).NET/C#? (0) | 2023.10.09 |
워드프레스 사용자 정의 테이블 또는 사용자 정의 게시물 유형? (0) | 2023.10.09 |