如何从三个表中获取不同的数据?

时间:2017-01-21 13:58:54

标签: sql oracle

查询:

select te.empno, te.ename, te.mgr
from test te
where te.deptno=10 and
      not exists (select 1 from t1 te1 where te1.deptno=te.deptno and te1.empno=te.empno) and
      not exists (select 1 from t te2 where te2.mgr=te.mgr);

表名:叔

EMPNO   ENAME   JOB      MGR    HIREDATE    SAL COMM    DEPTNO
7839    KING    PRESIDENT   -   17-Nov-81   5000    -   10
7782    CLARK   MANAGER  7839   9-Jun-81    2450    -   10
7934    MILLER  CLERK    7782   23-Jan-82   1300    -   10
123    Ranga    -        7566   -              -    -   10
124    srinu    -         123   -             - -       10

表名:T1

EMPNO   DEPTNO
7782    10
7934    10
7839    10

表名:吨

MGR     NAME
7566    aaa

这里我有三个不同的表格。我想要三个表不同的数据。有可能得到不同的请求帮助吗?

必需的输出:

EMPNO   ENAME   JOB      MGR    HIREDATE    SAL COMM    DEPTNO
123     Ranga    -        7566   -              -    -   10
124     srinu    -         123   -             - -       10

2 个答案:

答案 0 :(得分:0)

select te.empno, te.ename, te.mgr from test te
WHERE te.deptno=10
AND not exists(select 1 from t1 te1 where te1.deptno=te.deptno and te1.empno=te.empno)
AND  exists(select 1 from t te2 where te2.mgr=te.mgr)
union
select te.empno, te.ename, te.mgr from test te
WHERE te.deptno=10
AND  not exists(select 1 from t1 te1 where te1.deptno=te.deptno and te1.empno=te.empno)
AND not  exists(select 1 from t te2 where te2.mgr=te.mgr)

这是针对问题上方的解决方案

答案 1 :(得分:-1)

我认为你只需要两张桌子。 如果我理解正确你只需要两张桌子。

select te.EMPNO, te.ENAME, te.JOB, t.MGR,t.NAME as "MGRNAME",te.HIREDATE, te.SAL, te.COMM, te.DEPNO
from te
join t on t.MGR=te.MGR

如果您需要使用3个表格,请执行以下操作:

select te.EMPNO, te.ENAME, te.JOB, t.MGR,t.NAME as "MGRNAME",te.HIREDATE, te.SAL, te.COMM, te.DEPNO
from te
join t1 on t1.EMPNO=te.EMPNO and t1.DEPNO=te.DEPTNO
join t on t.MGR=te.MGR