次の例は、クエリでリライト最適化を 2 回実行します。最初の最適化では、サブクエリのネストを解除して、Employees テーブルと SalesOrders テーブルをジョインします。2 回目の最適化では、Employees と SalesOrders
の間のプライマリキーと外部キーのジョインを削除してクエリを簡素化します。このリライト最適化の一部では、ジョインの述部 e.EmployeeID=s.SalesRepresentative が述部 s.SalesRepresentative IS
NOT NULL に置換されます。
SELECT REWRITE( 'SELECT s.ID, s.OrderDate
FROM SalesOrders s
WHERE EXISTS ( SELECT *
FROM Employees e
WHERE e.EmployeeID = s.SalesRepresentative)' ) FROM dummy;
このクエリは、書き換えられたクエリがある単一カラムの結果セットを返します。
'SELECT s.ID, s.OrderDate FROM SalesOrders s WHERE s.SalesRepresentative IS NOT NULL'
次の REWRITE の例は、ANSI 引数を使用します。
SELECT REWRITE( 'SELECT DISTINCT s.ID, s.OrderDate, e.GivenName, e.EmployeeID
FROM SalesOrders s, Employees e
WHERE e.EmployeeID *= s.SalesRepresentative', 'ANSI' ) FROM dummy;
'SELECT DISTINCT s.ID, s.OrderDate, e.GivenName, e.EmployeeID
FROM Employees as e
LEFT OUTER JOIN SalesOrders as s
ON e.EmployeeID = s.SalesRepresentative';