我遇到了这样的查询:
SELECT (SELECT COUNT(1) FROM Orders o WHERE i.ItemId = o.ItemId) [C]
FROM Items i
Run Code Online (Sandbox Code Playgroud)
我将其更改为以下
;WITH cte_count
AS
(
SELECT COUNT(1) c, OrderId FROM Orders Group By ItemId
)
SELECT a.c [Count], i.Name
FROM Items i
INNER JOIN cte_count c ON (c.ItemId = i.ItemId)
Run Code Online (Sandbox Code Playgroud)
但两者的执行计划如下所示:
同样,还有另一个查询选择TOP 1 Order By Id
. 我尝试将这个移动到CROSS APPLY
但是对于这个,我也得到了相同的执行计划。
当然,查询中还有其他连接和列。
我的困境是关于使用CROSS APPLY
and 的实用性和优势CTE
。有没有或只是异国情调?