为什么" WITH"子句在Informix上给出语法错误?

时间:2017-03-03 12:47:46

标签: sql common-table-expression informix

我在Informix上尝试类似于下面的查询,但每次都会出现语法错误(-201:"发生语法错误")。

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

Informix 14.10及更高版本

Informix 14。10(2019年3月发布)增加了对WITH statement (Common Table Expressions)的支持。

Informix 12.10及更早版本

Informix 12.10中的Informix SELECT语句的文档(这是询问此问题时的最新文档)不包含WITH子句,因为服务器不支持WITH子句和公用表表达式(CTE) - 一个严重的疏忽,但却是生活中的一个事实。

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

SELECT locationnames
  FROM (SELECT * FROM TABLE(LIST{'abc','xyz'})(locationnames));

会产生:

abc
xyz

虽然此处不需要子查询,但是(您可以简单地使用SELECT * FROM TABLE(LIST{'abc','xyz'})(locationnames)来获得相同的结果)。但是,一般情况下,您必须完整地写出对CTE的每个引用,结果是优化程序没有发现共性的风险,因此不会尽可能地优化它。

答案 1 :(得分:1)

您可以尝试使用临时表(不需要特殊权限)。

select * from (your query)
into temp myTmpTable;

select * from MyTmpTable;