SQL Anywhere 遵循 SQL/2008 标准,明确集合函数在子查询中出现时的用法。这些更改将影响为该软件的以前版本编写的语句的行为:以前有效的查询现在可能产生错误消息,结果集也可能发生变化。
当集合函数出现在子查询中并且集合函数引用的列是外部引用时,整个集合函数本身会被视为外部引用。集合函数在外部查询块而非子查询中进行计算,并会成为子查询内的常量。
在子查询中使用外部引用集合函数时受到以下限制:
外部引用集合函数只能出现在位于 SELECT 列表或 HAVING 子句中的子查询中,并且这些子句必须位于紧接的外部块中。
外部引用集合函数只能包含一个外部列引用。
本地列引用和外部列引用不能在同一集合函数中混用。
通过重写集合函数来使其仅包括本地引用,可以规避与新标准有关的某些问题。例如,子查询 (SELECT MAX(S.y + R.y) FROM S)
同时包含本地列引用 (S.y) 和外部列引用 (R.y),现在这是非法的。可以将其重写为 (SELECT MAX(S.y) + R.y FROM S)
。在改写的内容中,集合函数只具有本地列引用。当外部引用集合函数出现在 SELECT 或 HAVING 以外的子句中时,可以进行同一类型的改写。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |