如何使用WITH子句重写该SQL相关子查询?
使用WITH子句重写关联子查询的方法
原SQL中最内层的子查询是关联子查询,它引用了外部查询的ORDERS表,直接提取为WITH子句的CTE会报错,因为CTE无法直接引用外部查询的表。我们可以将关联逻辑整合到CTE中,重写后的SQL如下:
WITH OrderProductLinks AS ( SELECT DISTINCT o.OrderDate AS OBJECT FROM ORDERS o JOIN PRODUCTS p ON p.CategoryID = o.EmployeeID ) SELECT OBJECT FROM OrderProductLinks
重写逻辑说明
- 将
ORDERS与PRODUCTS的关联条件p.CategoryID = o.EmployeeID直接放到CTE的JOIN语句中,替代原有的关联子查询 - 通过一层
DISTINCT完成去重,和原查询中两层DISTINCT的最终效果完全一致(原查询的两层去重本质是对关联后的OrderDate去重) - 最终从CTE中查询结果,输出与原SQL完全相同
内容的提问来源于stack exchange,提问作者Raaj
相关产品推荐
相关产品推荐

