在 Informix DB 中选择硬编码值

Jac*_*cob 6 sql database informix

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

select a from ( values (1), (2), (3) ) ;
Run Code Online (Sandbox Code Playgroud)

我希望得到结果:

1
2
3
Run Code Online (Sandbox Code Playgroud)

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

有人可以建议在 Informix 中工作的解决方案吗?

Jon*_*ler 7

尽管Gordon Linoff 所 建议的肯定会奏效,但也有使用 Informix 特定语法的更紧凑的符号可用。

例如:

SELECT a
  FROM TABLE(SET{1, 2, 3}) AS t(a)
Run Code Online (Sandbox Code Playgroud)

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

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

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


小智 5

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 )
Run Code Online (Sandbox Code Playgroud)

是批量插入的简单解决方案,选择部分解决其余问题!非常简单!:) 享受


Gor*_*off 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;
Run Code Online (Sandbox Code Playgroud)