Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle-根据非唯一字段的出现次数获取1或0条记录_Sql_Oracle - Fatal编程技术网

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分组