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)
有人可以帮忙吗?
Informix 14.10(2019 年 3 月发布)添加了对WITH 语句(Common Table Expressions)的支持。
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 的每个引用,随之而来的风险是优化器没有发现共性,因此不会像可能的那样优化。