SQL Anywhere befolgt die Standards von SQL/2008, um die Verwendung von Aggregatfunktionen zu regeln, wenn sie in einer Unterabfrage vorkommen. Diese Änderungen betreffen das Verhalten von Anweisungen, die für frühere Versionen der Software geschrieben wurden: Abfragen, die bisher gültig waren, können nun Fehlermeldungen erzeugen, und es kann sein, dass sich Ergebnismengen ändern.
Wenn eine Aggregatfunktion in einer Unterabfrage erscheint und die Spalte, die von der Aggregatfunktion referenziert wird, eine äußere Referenz darstellt, wird die gesamte Aggregatfunktion als äußere Referenz behandelt. Die Aggregatfunktion wird im äußeren Abfrageblock berechnet, nicht in der Unterabfrage, und wird dadurch zu einer Konstanten in der Unterabfrage.
Die folgenden Einschränkungen gelten für die Verwendung von Aggregatfunktionen mit äußerer Referenz in Unterabfragen:
Die Aggregatfunktion mit äußerer Referenz kann nur in Unterabfragen erscheinen, die sich in der SELECT-Liste oder der HAVING-Klausel befinden, und diese Klauseln müssen immer im unmittelbar anschließenden äußeren Block enthalten sein.
Aggregatfunktionen mit äußerer Referenz können nur eine äußere Spaltenreferenz enthalten.
Lokale Spaltenreferenzen und äußere Spaltenreferenzen können in derselben Aggregatfunktion nicht gemischt verwendet werden.
Einige Probleme, die in Verbindung mit diesen neuen Standard auftauchen, können vermieden werden , indem Sie die Aggregatfunktion
neu formulieren und darin nur lokale Referenzen verwenden. Die Unterabfrage (SELECT MAX(S.y + R.y) FROM S)
beispielsweise enthält sowohl eine lokale (S.y) als auch eine äußere (R.y) Spaltenreferenz, was nun nicht mehr zulässig ist.
Sie kann als (SELECT MAX(S.y) + R.y FROM S)
umgeschrieben werden. In der Neuprogrammierung hat die Aggregatfunktion nur eine lokale Spaltenreferenz. Die gleiche Art
der Neuprogrammierung kann angewendet werden, wenn eine Aggregatfunktion mit äußerer Referenz nicht in einer SELECT- oder
einer HAVING-Klausel auftritt.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |