我有一张表MYTABLE
N_REC | MYFIELD |
1 | foo |
2 | foo |
3 | bar |
其中N_REC是主键,MYFIELD是非唯一字段。 我需要在MYFIELD上查询这个表并提取相关的N_REC,但前提是只有一个MYFIELD出现;否则我不需要返回任何记录。 因此,如果我使用MYFIELD ='bar',我将获得3,如果我使用MYFIELD ='foo',我将无法获得任何记录。
我选择了以下查询
select * from
(
select
n_rec,
( select count(*) from mytable where mycolumn=my.mycolumn ) as counter
from mytable my where mycolumn=?
)
where counter=1
虽然它给了我想要的结果,但我觉得我正在运行两次相同的查询。 有没有更好的方法来实现我正在做的事情?
答案 0 :(得分:3)
我认为这应该做你想要的:
SELECT
my_field,
MAX(n_rec)
FROM
My_Table
GROUP BY
my_field
HAVING
COUNT(*) = 1
答案 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