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

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfrage und Änderung von Daten » Abfragen » Die FROM-Klausel: Tabellen angeben

 

SELECT über eine DML-Anweisung

SQL Anywhere unterstützt die Verwendung einer DML-Anweisung (INSERT, UPDATE, DELETE oder MERGE) als Tabellenausdruck in der FROM-Klausel einer Abfrage.

Wenn Sie einen Tabellenausdruck, der sich von einer DML-Anweisung ableitet, in einer Anweisung verwenden, wird dieser während des DESCRIBE ignoriert. Zum Zeitpunkt von OPEN wird zunächst die UPDATE-Anweisung ausgeführt und die Ergebnisse werden in einer temporären Tabelle gespeichert. Die temporäre Tabelle verwendet die Spaltennamen der Tabelle, die von der Anweisung geändert wird. Sie können auf die geänderten Werte mit dem Korrelationsnamen aus der REFERENCING-Klausel verweisen. Bei der Angabe von OLD oder FINAL brauchen Sie keine eindeutigen Spaltennamen für die aktualisierte Tabelle, die in der Abfrage referenziert wird. Die DML-Anweisung kann nur eine einzelne aktualisierbare Tabelle referenzieren. Aktualisierungen mehrerer Tabellen geben einen Fehler zurück.

Die folgende Abfrage verwendet z.B. eine SELECT-Anweisung über eine UPDATE-Anweisung zum Ausführen der unten aufgelisteten Vorgänge:

SELECT old_products.ID, old_products.name, old_products.UnitPrice AS OldPrice, 
       final_products.UnitPrice AS NewPrice, SOI.ID AS OrderID, SOI.Quantity
FROM
( UPDATE Products SET UnitPrice = UnitPrice * 1.07 )
     REFERENCING ( OLD AS old_products FINAL AS final_products )
  JOIN SalesOrderItems AS SOI ON SOI.ProductID = old_products.ID
WHERE SOI.ShipDate BETWEEN '2000-04-10' AND '2000-05-21'
      AND SOI.QUANTITY > 36
ORDER BY old_products.ID;

Die folgende Abfrage verwendet eine MERGE-Anweisung und eine UPDATE-Anweisung. Die Tabelle "modified_employees" repräsentiert eine Sammlung von Mitarbeitern, deren Status geändert wurde, während die MERGE-Anweisung die Bezeichner und Namen der Mitarbeiter, deren Gehalt um 3 % erhöht wurde, mit Mitarbeitern zusammenführt, die in der Tabelle "modified_employees" enthalten sind. In dieser Abfrage beziehen sich die Optionseinstellungen, die in der OPTION-Klausel angegeben sind, sowohl auf die UPDATE- als auch auf die MERGE-Anweisung.



CREATE TABLE modified_employees
( EmployeeID INTEGER PRIMARY KEY, Surname VARCHAR(40), GivenName VARCHAR(40) );


MERGE INTO modified_employees AS me
USING (SELECT modified_employees.EmployeeID, 
              modified_employees.Surname, 
              modified_employees.GivenName 
       FROM (
          UPDATE Employees
          SET Salary = Salary * 1.03
          WHERE ManagerID = 501) 
            REFERENCING (FINAL AS modified_employees) ) AS dt_e 
       ON dt_e.EmployeeID = me.EmployeeID 
WHEN MATCHED THEN SKIP
WHEN NOT MATCHED THEN INSERT
OPTION( optimization_level=1, isolation_level=2 );
 Mehrere Tabellen in einer Abfrage verwenden
 Tabellen ohne Materialisierung von Ergebnissen verwenden
 Siehe auch