Sql oracle-根据非唯一字段的出现次数获取1或0条记录
我有一张桌子我的桌子Sql oracle-根据非唯一字段的出现次数获取1或0条记录,sql,oracle,Sql,Oracle,我有一张桌子我的桌子 N_REC | MYFIELD | 1 | foo | 2 | foo | 3 | bar | 其中N_REC是主键,MYFIELD是非唯一字段。 我需要在MYFIELD上查询此表并提取关联的N_REC,但前提是MYFIELD只出现一次;否则我不需要返回任何记录。 因此,如果我使用MYFIELD='bar'我将得到3,如果我使用MYFIELD='foo'我将不会得到任何记录 我同意下面的问题 select * from
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
虽然它给了我期望的结果,但我觉得我在两次运行同一个查询。
有没有更好的方法来实现我正在做的事情?我认为这应该是你想要的:
SELECT
my_field,
MAX(n_rec)
FROM
My_Table
GROUP BY
my_field
HAVING
COUNT(*) = 1
您还可以尝试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
n_rec是主键,因此应该在MYFIELD上执行group by。从myfield=?的mytable中选择myfield,max(n_rec)?按计数(*)为1的myfield分组