Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 16 - 更改和升级 » 如何升级到 SQL Anywhere 16 » 疑难解答:数据库升级

 

疑难解答:集合函数和外部引用

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 以外的子句中时,可以进行同一类型的改写。

 示例 1
 示例 2
 另请参见