2011-09-21 78 views
2

的出現的次數越來越1點或0的記錄我有一個表MYTABLE預言 - 基於非唯一字段

N_REC | MYFIELD | 
1  | foo  | 
2  | foo  | 
3  | bar  | 

其中N_REC是主鍵和MyField的是一個非唯一的字段。 我需要在MYFIELD上查詢此表並提取關聯的N_REC,但前提是隻有一次出現MYFIELD;否則我不需要記錄返回。 所以,如果我去MYFIELD ='酒吧',我會得到3,如果我去與MYFIELD ='富'我會得到任何記錄。

我去下面的查詢

select * from 
    ( 
    select 
    n_rec, 
    (select count(*) from mytable where mycolumn=my.mycolumn) as counter 
    from mytable my where mycolumn=? 
    ) 
where counter=1 

雖然它給了我想要的結果,我覺得我在運行相同的查詢兩次。 有沒有更好的方法來實現我在做什麼?

回答

0

您也可以嘗試COUNT(*)的分析或窗版本和比較計劃的其他選項:

select n_rec, my_field 
from (select n_rec, my_field 
     , count(*) over (partition by my_field) as Counter 
    from myTable 
    where my_field = ?) 
where Counter = 1 
+0

按預期工作,謝謝 – user957316

3

我認爲這應該做你想要什麼:

SELECT 
    my_field, 
    MAX(n_rec) 
FROM 
    My_Table 
GROUP BY 
    my_field 
HAVING 
    COUNT(*) = 1 
+0

n_rec是主鍵,所以group by應該在MYFIELD上完成。從mytable中選擇myfield,max(n_rec)where myfield =?由myfield組計數(*)= 1 – user957316