我正在 Informix 上尝试类似于下面的查询,但我每次都收到语法错误(-201:“发生语法错误”)。
with a_qry (locationnames) as (SELECT * FROM TABLE(LIST{'abc','xyz'}))
select locationnames from a_qry;
有人可以帮忙吗?
最佳答案
Informix 14.10 及更高版本
Informix 14.10(2019 年 3 月发布)增加了对 WITH statement (Common Table Expressions) 的支持.
Informix 12.10 及更早版本
Informix 的文档 SELECT Informix 12.10 中的语句(在提出此问题时是最新的)不包含 WITH 子句,因为服务器不支持 WITH 子句和公用表表达式 (CTE) — 一个严重的遗漏,但仍然是生活中的事实。
对于您的具体示例,您可以使用:
SELECT locationnames
FROM (SELECT * FROM TABLE(LIST{'abc','xyz'})(locationnames));
这会产生:
abc
xyz
虽然这里不需要子查询,当然(您可以简单地使用 SELECT * FROM TABLE(LIST{'abc','xyz'})(locationnames)
来获取同样的结果)。不过,一般来说,您必须完整地写出对 CTE 的每个引用,随之而来的风险是优化器无法发现共性,因此无法尽可能地优化。
关于sql - 为什么 "WITH"子句会在 Informix 上给出语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579298/