我在Informix上尝试类似于下面的查询,但每次都会出现语法错误(-201:"发生语法错误")。
with a_qry (locationnames) as (SELECT * FROM TABLE(LIST{'abc','xyz'}))
select locationnames from a_qry;
有人可以帮忙吗?
答案 0 :(得分:4)
Informix 14。10(2019年3月发布)增加了对WITH statement (Common Table Expressions)的支持。
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;