从双表中选择数据

时间:2017-11-12 09:39:08

标签: sql oracle

我有以下数据: 1203 1222 3201 4300 哪些是产品数量,所以我需要选择它们作为表中的数据.. 我认为解决方案将使用双表.. 我尝试了以下代码:

Select * from { values '1203','1222','3201','4300'} as Table1 

但它不起作用!

3 个答案:

答案 0 :(得分:4)

Oracle有TABLE函数,它将varray作为输入并返回一个匿名表(匿名表示"表格没有名称"),只有一列名为column_value

Oracle还有函数sys.odcinumberlist(),它将逗号分隔的数字列表作为输入,并返回一组数字。 (同样,要生成varchar2值的varray,有sys.odcivarchar2list()。)

要输入您的for值并使用名为num的单个列(或您想要的任何其他名称)返回结果,您可以将这两个函数一起使用 - 并为select中的列添加别名条款。像这样:

select column_value as num
from   table( sys.odcinumberlist( 1203, 1222, 3201, 4300 ) )
;

   NUM
  ----
  1203
  1222
  3201
  4300

答案 1 :(得分:3)

标准 SQL中,您需要使用:

Select * 
from (values ('1203','1222','3201','4300')) as Table1;

这将创建一个包含四个(字符)列的行。如果您打算返回四个 将:

Select * 
from (values ('1203'),('1222'),('3201'),('4300')) as Table1 

但是,Oracle NOT 支持该语法。它也不支持没有FROM子句的SELECT。

如果您想在Oracle中使用4列的单行,则需要

select '1203','1222','3201','4300'
from dual;

如果您需要四个,则需要

select '1203'
from dual
union all
select '1222'
from dual
union all
select '3201'
from dual
union all
select '4300'
from dual;

此外:'1203' 是“数字”。这是一个字符串。在SQL中编写而不带引号的数字文字:1203是一个数字

答案 2 :(得分:2)

您也可以使用XMLTABLE

select TO_NUMBER(TRIM(COLUMN_VALUE)) as numbers from  XMLTABLE( '1203,1222,3201,4300');

Numbers
-------
1203
1222
3201
4300

这仅适用于数字。

编辑:根据评论专家的建议,最好用to_number包装。