我有以下架构:
employee(fname,lname,e_no,age,address,sex,slary,dept_number)
dpartment(dept_name,dept_number,dept_location)
project(pname,pnumber,plocation,dept_number)
works_on(e_no,pnumber,hours)
我必须找到所有员工工作超过3小时的项目名称。在某些情况下,员工的工作时间少于3小时,而其他人的工作时间则超过3小时。 我需要项目名称,所有员工的工作时间超过三个小时。无法弄清楚如何将其考虑在内。
请帮帮我!感谢
答案 0 :(得分:2)
试试这个:
SELECT p.pname
FROM project AS p
JOIN works_on AS w ON p.pnumber = w.pnumber
GROUP BY p.pname
HAVING COUNT(CASE WHEN hours > 3 THEN 1 END) = COUNT(*)
答案 1 :(得分:2)
当您重新提出问题时,找到没有员工工作时间少于3小时的项目,即最小时数大于3:
SELECT p.pname
FROM project AS p
JOIN works_on AS w ON p.pnumber = w.pnumber
GROUP BY p.pname
HAVING MIN(hours) > 3
或使用NOT EXISTS:
SELECT *
FROM project AS p
WHERE NOT EXISTS
( SELECT *
FROM works_on AS w
WHERE p.pnumber = w.pnumber
AND hours <= 3
)
注意,这不完全相同,因为它将返回没有分配员工的项目。