2012-12-15 20 views
1

我在甲骨文SQL兩個表:的Oracle SQL排除在查詢行導致

項目(PID,PNAME,預算,DID

科(DID,DNAME)

加粗 =主鍵

它alic =外鍵

我想列出比分部營銷更多項目的分部。

這裏是我的代碼:

select dname as "Division" 
from division d, project p 
where d.did = p.did 
group by dname 
having count(pid) >= all 
(select count(p.pid) 
from project p, division d 
where p.did = d.did and d.dname = 'marketing') 

我返回正確的記錄,但也營銷紀錄。如何從結果中排除營銷記錄?

+1

我計算出來: 選擇DNAME從除法d 「除法」 ,項目p 其中d.did = p.did和DNAME <> '營銷' 組由具有DNAME計數 (PID)> = all (select count(p.pid) from project p,division d where p.did = d.did and d.dname ='marketing') – swhit

+0

或者'count(pid)> all'如何讓你不包括與營銷項目數量相同的部門(包括其本身!) – beach

回答

3

你爲什麼不排除從營銷記錄你的初始SQL加入:

and d.dname != 'marketing' 

給第一個where從句。

0

您就有可能獲得效率的公共表表達式(WITH子句)按部門聚集的數量,那麼你就可以查詢它...

with cte as (
    select dname, 
      count(*) projects 
    from  project p, 
      division d 
    where p.did = d.did 
    group by dname) 
select dname, 
     projects 
from cte 
where projects > (select projects 
        from cte 
        where dname = 'Marketing)