什么应该是正确的sql

时间:2016-05-23 11:19:47

标签: mysql sql phpmyadmin

我有以下架构:

 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小时。 我需要项目名称,所有员工的工作时间超过三个小时。无法弄清楚如何将其考虑在内。

请帮帮我!感谢

2 个答案:

答案 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
 )

注意,这不完全相同,因为它将返回没有分配员工的项目。