在Informix DB中选择硬编码值

时间:2017-04-03 02:11:58

标签: sql database informix

我需要在一列中选择硬编码值,因此我可以将它们与Informix DB中的表连接起来。所以我尝试不同的变体来做这样的事情:

select a from ( values (1), (2), (3) ) ;

我希望得到结果:

1
2
3

我认为在其他数据库中,我尝试的这个或其他一些变体会返回值。但是,在Informix中它不起作用。

有人可以建议使用Informix的解决方案吗?

3 个答案:

答案 0 :(得分:4)

虽然Gordon Linoff suggests肯定会有效,但使用Informix特定的语法也可以使用更紧凑的符号。

例如:

SELECT a
  FROM TABLE(SET{1, 2, 3}) AS t(a)

这将非常愉快地(并且简洁地)生成整数列表。您可以使用LIST或MULTISET代替SET。与SET不同,MULTISET可以具有重复的元素; LIST保留顺序以及允许重复。

很多时候,你不会发现订单没有用简单的值保存 - 只是列表中的几个项目。 SET或MULTISET不保证订单;如果订单很重要,请使用LIST。

您可以在Collection Constructors下的IBM Informix 12.10手册中找到相关信息。不,你得到它并不明显 - 我从SELECT开始,然后是FROM,然后是'从集合变量中选择',然后是'表达式';我花了几秒钟茫然地盯着那个,然后看了'构造函数表达式',因此'收集构造函数'。

答案 1 :(得分:4)

INSERT INTO cccmte_pp ( cmte, pref, nro, eje, id_tri, id_cuo, fecha, vto1, vto2, id_tit, id_suj, id_bie, id_gru )
SELECT *
  FROM TABLE (MULTISET {
    row('RC', 4, 10, 2020, 1, 5, MDY(05,20,2020), MDY(05,20,2020),MDY(05,27,2020),101, 1, 96, 1 ), 
    row('RC', 4, 11, 2020, 1, 5, MDY(05,20,2020), MDY(05,20,2020),MDY(05,27,2020),101, 1, 96, 1 ) 
    }) 
    AS t( cmte, pref, nro, eje, id_tri, id_cuo, fecha, vto1, vto2, id_tit, id_suj, id_bie, id_gru )

这是用于批量插入的简单解决方案,然后选择零件来解决其余问题! 非常简单! :)享受

答案 2 :(得分:3)

Informix需要实际的查询语句。我认为这会奏效:

select a
from (select 1 as a from systables where tabid = 1 union all
      select 2 as a from systables where tabid = 1 union all
      select 3 as a from systables where tabid = 1
     ) t;