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
在这里更具可读性
由于我将要编写包含许多 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
在这里更具可读性