Одним из методов является использование EXISTS
и связанных подзапросов для проверки наличия записей, отображающих сотрудника как на программное, так и на аппаратное обеспечение.
SELECT e.ename,
e.age
FROM emp1 e
WHERE EXISTS (SELECT *
FROM works w
INNER JOIN dept d
ON d.did1 = w.did
WHERE d.name = 'Software')
AND EXISTS (SELECT *
FROM works w
INNER JOIN dept d
ON d.did1 = w.did
WHERE d.name = 'Hardware');
Другой метод состоит в том, чтобы присоединить отделы к сотрудникам, отфильтровать программное или аппаратное обеспечение, а затем GROUP BY
атрибуты сотрудника. Если они работают в обоих случаях, число идентификаторов отделов должно составлять 2
. Это можно проверить в предложении HAVING
.
SELECT e.name,
e.age
FROM emp1 e
INNER JOIN works w
ON w.eid = e.eid
INNER JOIN dept d
ON d.did1 = w.did
WHERE d.dname IN ('Software',
'Hardware')
GROUP BY e.ename,
e.age
HAVING count(DISTINCT d.did) = 2;