在以下示例中,对查询执行了两个重写优化。第一个优化解除了对 Employees 与 SalesOrders 表之间连接进行的子查询的嵌套。第二个优化通过消除 Employees 与 SalesOrders 之间的主键 - 外键连接简化了查询。此重写优化的一部分用连接谓语
s.SalesRepresentative IS NOT NULL 替换谓语 e.EmployeeID=s.SalesRepresentative。
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';