何时需要公共表表达式 (CTE)?
虽然派生表可能足以满足所有场景,但公共表表达式 ( CTE)在某些情况下具有明显的优势。
局限性派生表和临时表
考虑数据需要多次连接的场景。使用常规 SELECT 语句或派生表将导致为每个实例复制联接语法,从而增加代码的冗长性。但是,CTE 允许您定义一个可在查询中多次引用的可重用表。
示例
假设您有一个“Customers”表并且想要查找已下了多个订单的客户。
使用CTE:
WITH CustomerOrders AS ( SELECT CustomerID, COUNT(*) AS OrderCount FROM Orders GROUP BY CustomerID ) SELECT * FROM Customers JOIN CustomerOrders ON Customers.CustomerID = CustomerOrders.CustomerID WHERE OrderCount > 1;
使用派生表:
(SELECT CustomerID, COUNT(*) AS OrderCount FROM Orders GROUP BY CustomerID) AS CustomerOrders SELECT * FROM Customers JOIN CustomerOrders ON Customers.CustomerID = CustomerOrders.CustomerID WHERE OrderCount > 1;
如您所见,CTE 方法无需定义派生表别名(“客户订单”)两次。
其他 CTE优点
除了可重用性之外,CTE 还具有其他优点:
以上是什么时候应该使用公用表表达式 (CTE) 而不是派生表?的详细内容。更多信息请关注PHP中文网其他相关文章!