如果没有找到带有IN子句的oracle查询的行,则返回null

时间:2016-06-22 08:12:27

标签: oracle plsql

我有一个包含三列的表格。 我用IN子句查询该表。

从table1中选择column1,其中column1 in(1,2,3)按column2,column3

排序

table1仅包含column1中的值1和2。我想在结果中返回不可用的值,并且应该在底部排序。

示例数据

column1第2列第3列

1   100 11

2   101 50

输出,不可用的值应该在最后。

column1第2列第3列

1   100 11

2   101 50

3 null null

我尝试使用NVL的子查询,比如选择nvl((select ... in(1,2,3)),null)来自dual,由于IN子句,我得到单行子查询返回多行问题,这是预期的。

也尝试了工会,但没有任何作用。很好,如果有任何帮助感谢

2 个答案:

答案 0 :(得分:0)

如果您无法从另一个表中获取1,2,3值,可以尝试使用:

with t1 as (
  select col1,col2,col3
  from tab1
  where cod_flusso in ('1','2','3')),
t2 as (
  select '1' as col1,null,null
  from dual
  union
  select '2',null,null
  from dual
  union
  select '3',null,null
  from dual)
select t2.col1,col2,col3
from t2
left outer join t1
on t1.col1= t2.col1

如果您可以在第二个表中存储1,2,3个值,那么它会更好,然后使用左外连接。

答案 1 :(得分:0)

我认为你可以用一个联盟来做到这一点:

select column1 from table1 where column1 in (1,2,3) order by column2, column3 
union all 
select null from table1 where column1 not in (1,2,3) order by column2, column3