我正在尝试解决问题db.grussell上的问题
列出现任员工的全名和职位 罗伯特·罗伯茨(Robert Roberts)上过的任何课程。
我的方法是编写一个子查询,该子查询输出罗伯特·罗伯茨(Robert Roberts)所获取的courseno
的值,然后使用该courseno
获得相应的empno(employment number)
。通过将jobhistory
和employee
表连接在一起,在其他表中将其进一步用作过滤器。但是在输出中,我不想让行与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