【发布时间】:2019-09-05 13:53:38
【问题描述】:
我有一张假桌子
create table emp
(
id int,
name varchar,
sal int
)
with cte1 as(
select * from emp where name like 'a%'
),
cte2 as (
select * from cte1 where sal > 100
),
cte3 as (
select * from cte1 where id != 1223
)
select * from cte2
union all
select * from ct3
以这种方式使用 cte 是否保证 cte1、cte2、cte3 只会运行一次?
虽然我可以检查查询计划,但这是否可以保证如果数据发生更改并且下次优化器决定以另一种方式执行此操作时行为不会改变?
【问题讨论】:
-
每次被引用。
-
每次被引用。在这种情况下,
emp将被引用两次。 (可以在查询的query plan 中看到)
标签: sql-server common-table-expression