暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 选择第一个值 (如果存在),否则选择另一个值

ASKTOM 2018-11-15
309

问题描述

你好

我有一张这样的表

ID    NTYPE
1       0
2       0
3       1
4       2
复制


我需要一个select来根据NTYPE (1到N) 列表获取所有id,但是如果任何NTYPE列表不存在,则获取NTYPE = 0 ..

例如:
如果NTYPE list = 1,则id必须为3
如果NTYPE list = 1,2,则必须3,4 id
如果NTYPE list = 2,3,则id必须1,2,4...1和2,因为在ntype = 3的地方没有记录,然后在NTYPE = 0的地方得到...

我可以做一个可以做到这一点的程序,但我想在一个选择

有可能吗?有什么想法吗?

提前感谢

专家解答

所以你想加入每个输入值到ntype和:

-如果存在,则返回相应的id
-如果不是,则ntype 0的id?

如果是这样,您可以通过将您的输入作为表传递来做到这一点。然后在值等于ntype的地方加入。或者ntype为零。并且表中没有其他行与输入匹配的ntype匹配。

这给出了类似的东西:

create table t (
  id int, ntype int 
);

insert into t values ( 1, 0 );
insert into t values ( 2, 0 );
insert into t values ( 3, 1 );
insert into t values ( 4, 2 );
commit;

with inputs as (
  select 1 n from dual
)
  select t.id 
  from   t
  join   inputs i
  on     t.ntype = i.n or (
    t.ntype = 0 and 
    not exists (
      select * from t t2
      where  t2.ntype = i.n
    )
  );

ID   
   3 

with inputs as (
  select 2 n from dual union all
  select 1 n from dual
)
  select t.id 
  from   t
  join   inputs i
  on     t.ntype = i.n or (
    t.ntype = 0 and 
    not exists (
      select * from t t2
      where  t2.ntype = i.n
    )
  );

ID   
   4 
   3 

with inputs as (
  select 2 n from dual union all
  select 3 n from dual
)
  select t.id t
  join   inputs i
  on     t.ntype = i.n or (
    t.ntype = 0 and 
    not exists (
      select * from t t2
      where  t2.ntype = i.n
    )
  );

ID   
   4 
   1 
   2 
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论