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

标签 sql common-table-expression informix

我正在 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/

相关文章:

sql - Microsoft Query 中的子查询语法差异

php - Mysql根据一张表的ID从2张表中选择数据

mysql - 如何将 RIGHT LEFT 函数转换为 codeigniter 事件记录

sql - 如何限制CTE递归深度但选择通用表?

SQL 查询汇总年初至今的实际值和 YTD 的平均值

sql - 使用子查询时的Informix “A syntax error has occurred.”

mysql - SQL,使用数学将行转换为列

mysql - 更新/重置每个 ID 子集的列值(使用 "counter")

sql-server-2005 - 为什么我们不能在递归CTE中使用外部联接?

Informix - IF 语句