Mysql 正确的sql应该是什么
我有以下模式:Mysql 正确的sql应该是什么,mysql,sql,phpmyadmin,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小
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小时。
我需要所有员工工作超过三小时的项目名称。我不知道该怎么考虑这个问题
请帮帮我!谢谢试试这个:
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
或不存在:
SELECT *
FROM project AS p
WHERE NOT EXISTS
( SELECT *
FROM works_on AS w
WHERE p.pnumber = w.pnumber
AND hours <= 3
)
小心,这不完全一样,因为它将返回没有指定员工的项目。您是否尝试加入表?似乎有效…您可以解释having子句吗?请…在我的sql中没有使用太多“having”…事实上,我对此很陌生..需要一些解释nice@AL-zami COUNTCASE当小时数>3时,则1结束称为条件聚合:它统计记录有超过3小时的。如果此数字等于COUNT*,则所有项目记录的关联时间都超过3小时。