为什么“WITH”子句在 Informix 上出现语法错误?

2 sql informix common-table-expression

我正在 Informix 上尝试类似于以下查询的查询,但我每次都收到语法错误(-201:“发生语法错误”)。

with a_qry (locationnames) as (SELECT * FROM TABLE(LIST{'abc','xyz'}))
select locationnames from a_qry;
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

Jon*_*ler 5

Informix 14.10 及更高版本

Informix 14.10(2019 年 3 月发布)添加了对WITH 语句(Common Table Expressions)的支持

Informix 12.10 及更早版本

Informix 12.10 中的 Informix SELECT语句的文档(这是提出此问题时的最新版本)不包括 WITH 子句,因为服务器不支持 WITH 子句和公用表表达式 (CTE) — 一个严重的遗漏,但尽管如此生活中的一个事实。

对于您的具体示例,您可以使用:

SELECT locationnames
  FROM (SELECT * FROM TABLE(LIST{'abc','xyz'})(locationnames));
Run Code Online (Sandbox Code Playgroud)

这将产生:

abc
xyz
Run Code Online (Sandbox Code Playgroud)

当然,虽然这里不需要子查询(您可以简单地使用它SELECT * FROM TABLE(LIST{'abc','xyz'})(locationnames)来获得相同的结果)。但是,一般来说,您必须完整地写出对 CTE 的每个引用,随之而来的风险是优化器没有发现共性,因此不会像可能的那样优化。