首页 > 解决方案 > 消除子查询中查询的行?

问题描述

我正在尝试解决db.grussell上的问题,问题陈述是

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

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

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,     

职业

 EMPNO   COURSENO
     1        1
     2        2

标签: mysqlsqllogic

解决方案


推荐阅读