什么应该是正确的 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 个没有指定员工的项目。
我有以下架构:
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 个没有指定员工的项目。