什么应该是正确的 sql

what should be the correct sql

我有以下架构:

 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 小时的项目的名称 hours.There 可能在某些情况下,员工工作时间少于 3 小时,而其他员工工作时间超过 3 小时。 我需要所有员工工作超过三个小时的项目名称。不知道如何考虑这一点。

请帮帮我!谢谢

试试这个:

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(*)

当你重新表述你的问题时,它是找到没有员工工作时间少于三小时的项目,即最少工作时间大于三小时:

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
 )

注意,这并不完全相同,因为它将 return 个没有指定员工的项目。