消除在子查询中查询的行?

时间:2018-10-01 07:21:30

标签: mysql sql logic

我正在尝试解决问题db.grussell上的问题

  

列出现任员工的全名和职位   罗伯特·罗伯茨(Robert Roberts)上过的任何课程。

我的方法是编写一个子查询,该子查询输出罗伯特·罗伯茨(Robert Roberts)所获取的courseno的值,然后使用该courseno获得相应的empno(employment number)。通过将jobhistoryemployee表连接在一起,在其他表中将其进一步用作过滤器。但是在输出中,我不想让行与Robert Roberts相关联。但是我知道它的到来是因为在第一个子查询中,与罗伯特·罗伯特关联的courseno用于获取empno,因此罗伯特·罗伯茨也被包括在内。

SELECT jobhistory.position,employee.surname,employee.forenames
FROM jobhistory
JOIN employee ON employee.empno= jobhistory.empno
WHERE employee.empno = ANY(
     SELECT empno
     FROM empcourse
     WHERE courseno = ANY(
         SELECT courseno
         FROM empcourse
         JOIN employee ON employee.empno = empcourse.empno
             AND employee.surname = 'Roberts'
             AND employee.forenames ='Robert'
         )
    )
    AND jobhistory.enddate IS NULL

工作经历

EMPNO   POSITION                    STARTDATE ENDDATE   SALARY
1       Accounts Manager            12-JAN-76           30000
1       Assistant Accounts Manager  11-FEB-72 12-JAN-76 22000

员工

EMPNO   SURNAME FORENAMES   DOB         ADDRESS    TELNO    DEPNO
1       Jones   Elizabeth   05-JAN-44   26 Agnews  212-337   1
                                        Shamrock,  
2       Smith   Robert      07-FEB-47   18 Marsh   031 732   1
                                        Street,     

empcourse

 EMPNO   COURSENO
     1        1
     2        2

0 个答案:

没有答案