2011-09-21 64 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