2017-08-15 56 views
1

我想提供一个虚拟列的ID列表。这将帮助我确定那些不在表格中的ID。 例子:我想生成下面的硬编码数据集“与”条款列表中的虚拟值作为虚拟列

ID 
12345 
23456 
34567 

这是可能在Oracle中?

回答

3

这是做你想做的吗?

with ids as (
     select 12345 as id from dual union all 
     select 23456 from dual union all 
     select 34567 from dual 
    ) 
select ids.* 
from ids; 

还有其他方法来表达这一点。然而,简单的union all是简短列表的最简单方法。

+0

我有一个相当大的名单。您能否提供一个替代方案,以便我可以对值列表进行硬编码? – user1124702

5

你可以使用一个集合;如果您有少于32K项built-in ODCINumberList会做:

select * from table(sys.odcinumberlist(12345, 23456, 34567)); 

COLUMN_VALUE 
------------ 
     12345 
     23456 
     34567 

或者作为CTE如果你喜欢:

with cte (id) as (
    select * from table(sys.odcinumberlist(12345, 23456, 34567)) 
) 
select * from cte; 

     ID 
---------- 
    12345 
    23456 
    34567 

它比维护大量的union all报表更容易一些,只要你只需要一个维度。它也可以作为集合从应用程序层传递到查询或过程 - 例如,可以将Java数组转换为通过JDBC传递的集合。

但是,如果你有很多值,这些值不是在运行时由某种外部机制提供的,那么它们应该可能在某个表中。