2012-11-14 99 views
2

有兩個表格可能與此有關。工作和員工。這兩個表格的內容是員工的EMPID NAME SALARY DID(部門ID)和工作時的PID EMPID HOURS。我寫的SQL是列出在多個項目上工作的員工的姓名

select e.name, w.pid 
from employee e, workon w 
where e.empid = w.empid 
group by e.name, w.pid, w.empid 
having count (e.name) > 1 
order by w.pid 

我一直在試圖找出爲什麼這個代碼不會給我一個以上的項目工作的員工。請幫我弄清楚我做錯了什麼。

回答

1

您的組通過返航每位項目員工一行,顧名思義這可能永遠不會有超過1排

下面的SQL應該工作

警告:我不知道這將如何影響性能服務器使用需要您自擔風險

以下將爲每個員工每個工作崗位返回1行,但僅限於擁有1個以上工作記錄的員工(因此,如果員工有5個工作記錄,您將獲得5個具有相同e.name的行並且然後是5個不同的w.pid值)

select e.name, w.pid 
from employee e, workon w 
where e.empid = w.empid 
and e.empid in (
select w.empid 
from workon w -- there was a typo here originally 
group by 1 
having count (*) > 1 
) 
order by e.name, w.pid 
+0

試圖運行該代碼時出現錯誤「ORA-00942:表或視圖不存在」 – user1824931

+0

該代碼有錯誤,第二個語句是「從工作w」而不是「workon」 w「 –

+0

無視這一點,我發現了錯誤。謝謝 – user1824931

1
SELECT E.NAME, W.PID 
from employee e inner join workon w on e.empid = w.empid 
where e.empid in (select EMPID from workon GROUP BY EMPID HAVING COUNT(EMPID) > 1) 

子查詢計數的所有記錄與關聯至其超過1個項目EMPID,主要查詢檢查是否從EMPID表EMPID在子查詢的結果。

相關問題