环境
- DB2 v11.5.0.0
CTE (Common Table Expression)
基本用法
例如:
with temp1 as (select * from t1 where c1 >= 1)
select * from temp1 where c2 <= 100
可见,定义好CTE之后,就可以当成table一样直接用了。
多个CTE
可以定义多个CTE,中间用逗号分隔,例如:
with temp1 as (select * from t1 where c1 >= 1),
temp2 as (select * from t2 where c1 < 5)
select * from temp1 join temp2 on temp1.c2 = temp2.c1
注意最后一个CTE后面没有逗号。
hardcode的CTE
有时为了方便,我们需要一些测试数据,但又嫌麻烦,不想定义一个table并插入数据,这时可以定义一个CTE,hardcode一些数据。
比如,我希望有一个临时table,包含两个column C1
和 C2
,类型分别为 int
和 varchar(100)
,table里面有2条记录:
C1 C2
----------- ---1 aaa2 bbb
with temp1(c1, c2) as (values (1, 'aaa'), (2, 'bbb'))
select * from temp1 where c1 > 1
这样,就可以很方便的创建一些测试数据。
注意:这种CTE需要显式声明column的名字,否则后面无法指定column名字。