WITH vs嵌套SELECT或INSERT INTO @temp?

时间:2015-01-27 09:40:33

标签: sql sql-server-2012

由于我要编写带有许多联合alls,内连接的复杂查询,为了清楚起见,我想选择代码的最佳结构。这是两个导致相同结果的查询。惯例是什么?您是否建议使用嵌套的SELECT或WITH语句或INSERT INTO临时表?你能指导我任何出版物如何使用TAB,括号等。

首次质询

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

第二次查询

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

1 个答案:

答案 0 :(得分:1)

使用非递归CTE我在subquery上找到的优势是,referred范围内的CTE可以更多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

显然{{1}}在这里更具可读性