在同一查询中多次使用同名CTE?

时间:2018-03-13 14:49:37

标签: sql-server-2008 tsql

我在一个脚本中多次使用相同的.condarc而没有任何问题,但我只想仔细检查。

让我们说我的脚本看起来像这样:

cte

使用具有不同;with cte as ( select provider, count(*) as 'rows_count' from table1 ) select *From cte ;with cte as ( select fname, count(*) as 'totals' from table_another ) select *From cte ;with cte as ( select sum(sales) as 'total_sales from table_yet_another ) select *From cte 语句的相同cte是否有任何问题?或者他们应该有不同的名称

3 个答案:

答案 0 :(得分:1)

该名称只需在一个语句中是唯一的。所以你拥有的是好的(如果有点令人困惑),但这不会是:

with cte as
(
    select provider, count(*) as 'rows_count'
    from table1
), cte as
(
    select fname, count(*) as 'totals'
    from table_another
) select *From cte

答案 1 :(得分:0)

CTE的范围是声明的本地范围。您可以在不同的语句之间重复它们(但不能在同一个语句中重复两次)。虽然我建议为每一个使用有意义的名称,就像你使用表格一样。

答案 2 :(得分:0)

这不是同一个查询。 cte可能只有一个select语句。这是三个不同的陈述。