查询执行顺序

时间:2016-01-30 05:49:52

标签: sql db2 ibm-midrange

我查询了基本结构

with cte1 as (Select *query on tbl1*)
,cte2 as (select *query on tbl1*
      Exception join cte1 )

Select * from cte1
union all
Select * from cte2

而且我真的不知道我是否可以确信它会按预期运行 - 每个ctes产生类似的行,但会有不同的逻辑 - 我希望cte1通过其逻辑表通过表,然后cte2来查看同样的表,在cte1选择了适用于它的所有记录之后 - 这会有效吗?

编辑:好的,我已经创建了一些数据,并概述了我所关心的问题。我不知道如何解释philipxy对上面的反应 - 我可以从他的回答中理解cte1的期望,但我不完全明白cte2会是什么 - cte1在cte2之前得到“声明”,所以他们的值是查询开始后锁定?

promise.all()

1 个答案:

答案 0 :(得分:0)

您似乎对SQL查询的解释感到困惑。也许所有查询,或者只是CTE查询,或者只是递归CTE查询。

关系查询的值​​基于表示值(即表)的名称以及根据这些值计算的表达式的值,以提供其他值。

然后,更新会使基表的新当前值(即与基表名称关联的值)成为查询计算的值。 SQL查询描述了如何根据输入行更新行,但所有行都会立即更新。

基表名称代表执行查询之前的值。递归定义的CTE名称是在其自己的定义中使用的名称。这描述了一个循环,该循环在执行时为每次迭代中的CTE名称赋予新值。 (你这里没有这样做。)否则,CTE名称代表引入时给出的值。

由于此CTE查询不是递归的,因此您可以将基表名称和CTE名称视为其值。因此,您的CTE名称只有一个值,当您从命名(基本或CTE)表中进行SELECT时,它不会影响其值。