什么应该是正确的SQL
我有以下模式:什么应该是正确的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 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
)
小心,这不完全相同,因为它会返回没有分配员工的项目。
不错,简单...谢谢:)) –
试试这个:
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(*)
似乎工作...你能解释有条款请...没有太多'有'在我的SQL ...事实上,我很新这个..一些解释会很好 –
@ AL-zami'COUNT(CASE当时> 3 THEN 1 END)'被称为*条件聚合*:它计数记录有超过3小时。如果这个数字等于'COUNT(*)',那么*所有*项目记录的关联时间超过3小时。 –
您是否尝试过连接表格? – jarlh
[你有什么尝试?](http://mattgemmell.com/what-have-you-tried/) – Pred