一道oracle面试题
表1:部门关系表
father_code child_code
2 5
2 6
3 7
3 8
4 9
4 10
表2:部门详情表
FATHER_CODE NAME
2 部门2
3 部门3
4 部门4
5 科1
6 科2
7 科1
8 科2
9 科1
10 科2
表3:
编号 部门编号 科室编号
2 部门2
5 部门2 科1
6 部门2 科2
3 部门3
7 部门3 科1
8 部门3 科2
10 部门4 科2
4 部门4
9 部门4 科1
------------------------------------------------
根据表1和表2,得出表3的结果(所有字段都是varchar2类型)
参考答案:
SELECT
C.编号
,C.部门编号
,C.科室编号
FROM(
SELECT
B.FATHER_CODE 编号
,CASE WHEN B.FATHER_CODE IN (SELECT FATHER_CODE FROM DEPT_A)
THEN B.NAME
ELSE (SELECT
C.NAME
FROM DEPT_B C WHERE C.FATHER_CODE=
(SELECT A.FATHER_CODE FROM DEPT_A A WHERE A.CHILD_CODE=B.FATHER_CODE))
END 部门编号
,CASE WHEN B.FATHER_CODE IN (SELECT FATHER_CODE FROM DEPT_A)
THEN NULL
ELSE B.NAME
END 科室编号
FROM DEPT_B B
)C
ORDER BY C.部门编号,C.编号;