WITH vs 嵌套 SELECT 或者 INSERT INTO @temp?

WITH vs nested SELECT or maybe INSERT INTO @temp?

由于我将要编写包含许多 union alls、inner joins 的复杂查询,为了清晰起见,我想选择代码的最佳结构。这是导致相同结果的两个查询。惯例是什么?您是否建议使用嵌套的 SELECT 或 WITH 语句或者 INSERT INTO 临时表?你能告诉我如何使用制表符、括号等的任何出版物吗

第一次查询

WITH BigPictureQuery AS 
    (
    SELECT BottomLevelQuery FROM TabA AS a
    )
SELECT Something FROM BigPictureQuery

第二次查询

SELECT Something FROM 
    (
    SELECT BottomLevelQuery 
    FROM TabA AS a
    ) 
    AS BigPictureQuery

我发现在 subquery 上使用非递归 CTE 的优点是它可以在 CTE 范围内多 referred 一次。

而且它比子查询更具可读性。在性能方面,这两种方法将是相似的。

例如:CTE

WITH BigPictureQuery AS 
    (
    SELECT BottomLevelQuery FROM TabA AS a
    )
SELECT Something FROM BigPictureQuery  A
join BigPictureQuery B on a.Something =b.Something 
join BigPictureQuery C on a.Something =C.Something 
..

subselect 执行相同的操作,查询将类似于

SELECT Something FROM 
(
SELECT BottomLevelQuery 
FROM TabA 
) 
AS A
join 
(
SELECT BottomLevelQuery 
FROM TabA 
) 
AS A on a.BottomLevelQuery =b.BottomLevelQuery 
join 
(
SELECT BottomLevelQuery 
FROM TabA 
) 
AS C on a.BottomLevelQuery =C.BottomLevelQuery 
...

显然 CTE 在这里更具可读性