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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » Joins: Daten aus mehreren Tabellen abrufen » Inner- und Outer-Joins » Transact-SQL-Outer-Joins (*= oder =*)

 

Einschränkungen bei Transact-SQL-Outer-Joins

Hinweis

Die Unterstützung für die Transact-SQL-Outer-Join-Operatoren *= und =* wird nicht weiterentwickelt und in einer zukünftigen Version entfernt werden.

Für Outer-Joins gelten einige Einschränkungen in Transact-SQL:

  • Wenn Sie einen Outer-Join und eine Bedingung für eine Spalte aus der Nullwert-liefernden Tabelle des Outer-Joins eingeben, werden unter Umständen unerwartete Ergebnisse geliefert. Die Bedingung in der Abfrage schließt keine Zeilen aus der Ergebnismenge aus, sondern hat Auswirkungen auf die Werte, die in den Zeilen der Ergebnismenge erscheinen. Für Zeilen, die der Bedingung nicht entsprechen, erscheint NULL in den Spalten der Nullwert-liefernden Tabelle.

  • Sie können die Syntax für ANSI/ISO SQL und die Transact-SQL-Syntax nicht in einer einzelnen Abfrage mischen. Wenn eine Ansicht mit einem Dialekt für einen Outer-Join verwendet wird, muss für alle Outer-Join-Abfragen für diese Ansicht derselbe Dialekt verwendet werden.

  • Eine Nullwert-liefernde Tabelle kann nicht sowohl in einer Outer-Join-Klausel für Transact-SQL und in einer normalen Join-Klausel oder in zwei Outer-Joins verwendet werden. Folgende WHERE-Klausel ist beispielsweise nicht zulässig, da Tabelle S gegen diese Einschränkung verstößt:

    WHERE R.x *= S.x
    AND S.y = T.y

    Wenn Sie Ihre Abfrage nicht neu schreiben können, um die Verwendung einer Tabelle in einem Outer-Join und einem normalen Join zu vermeiden, müssen Sie Ihre Anforderung in zwei getrennte Abfragen aufteilen oder lediglich die ANSI/ISO SQL-Syntax verwenden.

  • Sie können keine Unterabfrage verwenden, die eine Join-Bedingung mit einer Nullwert-liefernden Tabelle eines Outer-Joins enthält. Folgende WHERE-Klausel ist beispielsweise nicht zulässig:

    WHERE R.x *= S.y
    AND EXISTS ( SELECT *
                 FROM T
                 WHERE T.x = S.x )