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 » Allgemeine Tabellenausdrücke

 

Wo allgemeine Tabellenausdrücke zulässig sind

Allgemeine Tabellenausdrücke sind nur an drei Stellen zulässig, auch wenn sie im Hauptteil der Abfrage oder in einer der Unterabfragen referenziert werden können.

  • Oberste SELECT-Anweisung   Allgemeine Tabellenausdrücke sind innerhalb von SELECT-Anweisungen der obersten Stufe zulässig, aber nicht in Unterabfragen.
    WITH DeptPayroll( DepartmentID, amt ) AS
      ( SELECT DepartmentID, SUM( Salary ) AS amt
        FROM Employees GROUP BY DepartmentID )
    SELECT DepartmentID, amt
    FROM DeptPayroll
    WHERE amt = ( SELECT MAX( amt )
                  FROM DeptPayroll );

  • Die obersten SELECT-Anweisungen in einer Ansichtsdefinition   Allgemeine Tabellenausdrücke sind innerhalb der SELECT-Anweisung der obersten Stufe zulässig, die eine Ansicht definiert, aber nicht in Unterabfragen innerhalb der Definition.
    CREATE VIEW LargestDept ( DepartmentID, Size, pay ) AS
       WITH
         CountEmployees( DepartmentID, n ) AS
           ( SELECT DepartmentID, COUNT( * ) AS n
             FROM Employees GROUP BY DepartmentID ),
         DeptPayroll( DepartmentID, amt ) AS
           ( SELECT DepartmentID, SUM( Salary ) AS amt
             FROM Employees GROUP BY DepartmentID )
      SELECT count.DepartmentID, count.n, pay.amt
      FROM CountEmployees count JOIN DeptPayroll pay
      ON count.DepartmentID = pay.DepartmentID
      WHERE count.n = ( SELECT MAX( n ) FROM CountEmployees )
         OR pay.amt = ( SELECT MAX( amt ) FROM DeptPayroll );

  • Eine oberste SELECT-Anweisung in einer INSERT-Anweisung   Allgemeine Tabellenausdrücke sind innerhalb einer SELECT-Anweisung der obersten Stufe in einer INSERT-Anweisung zulässig, aber nicht in Unterabfragen innerhalb der INSERT-Anweisung.
    CREATE TABLE LargestPayrolls ( DepartmentID INTEGER, Payroll NUMERIC, CurrentDate DATE );
    INSERT INTO LargestPayrolls( DepartmentID, Payroll, CurrentDate )
      WITH DeptPayroll( DepartmentID, amt ) AS
        ( SELECT DepartmentID, SUM( Salary ) AS amt
          FROM Employees
          GROUP BY DepartmentID )
      SELECT DepartmentID, amt, CURRENT TIMESTAMP
      FROM DeptPayroll
      WHERE amt = ( SELECT MAX( amt )
                    FROM DeptPayroll );

Siehe auch