2016-05-23 37 views
-1

我有以下模式:什麼應該是正確的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小時。 我需要所有員工工作時間超過三小時的項目名稱。無法弄清楚如何考慮這一點。

請幫我一把!感謝

+0

您是否嘗試過連接表格? – jarlh

+0

[你有什麼嘗試?](http://mattgemmell.com/what-have-you-tried/) – Pred

回答

2

當你改一下你的問題是找到其中任何員工工作不到三個小時項目,即最小時間大於三:

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 
) 

小心,這不完全相同,因爲它會返回沒有分配員工的項目。

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

似乎工作...你能解釋有條款請...沒有太多'有'在我的SQL ...事實上,我很新這個..一些解釋會很好 –

+0

@ AL-zami'COUNT(CASE當時> 3 THEN 1 END)'被稱爲*條件聚合*:它計數記錄有超過3小時。如果這個數字等於'COUNT(*)',那麼*所有*項目記錄的關聯時間超過3小時。 –

相關問題