公用表表达式不创建对象

日期:2020-03-12编辑作者:北京pk10官网-数据库

一、with as 公用表表达式

类似VIEW,但是不并没有创建对象,WITH AS 公用表表达式不创建对象,只能被后随的SELECT语句,其作用:

  1. 实现递归查询(树形结构)

  2. 可以在一个语句中多次引用公用表表达式,使其更加简洁

二、非递归的公共表达式

可以是定义列或自动列和select into 效果差不多

--指定列with withTmp1 (code,cName)as( select id,Name from ClassUnis)select * from withTmp1--自动列with withTmp2 as( select * from ClassUnis where Author = 'system')select * from withTmp2

三、递归的方式

通过UNION ALL 连接部分。通过连接自身whit as 创建的表达式,它的连接条件就是递归的条件。可以从根节点往下查找,从子节点往父节点查找。只需要颠倒一下连接条件。例如代码中条件改为t.ID = c.ParentId即可

with tree as( --0 as Level 定义树的层级,从0开始 select *,0 as Level from ClassUnis where ParentId is null union all --t.Level + 1每递归一次层级递增 select c.*,t.Level + 1 from ClassUnis c,tree t where c.ParentId = t.ID --from ClassUnis c inner join tree t on c.ParentId = t.ID)select * from tree where Author not like'%/%'

还能通过option(maxrecursion Number) 设置最大递归次数。例如上诉结果Level 最大值为2表示递归两次。我们设置其值为1

with tree as( select *,0 as Level from ClassUnis where ParentId is null union all select c.*,t.Level + 1 from ClassUnis c,tree t where c.ParentId = t.ID)select * from tree where Author not like'%/%' option(maxrecursion 1)

好了这篇文章就介绍到这了,希望能帮助到你。

本文由北京pk赛车官网下载发布于北京pk10官网-数据库,转载请注明出处:公用表表达式不创建对象

关键词:

用于查询函数

SQL语句可以为 表名称 或 列名称 指定别名。 SQL 别名SQL 别名用于为 表 或 表中的列 提供临时名称。SQL 别名通常用于...

详细>>

用一条SQL语句查询出每门课都大于80分的学生姓名

Q1:表StudentScores如下,用一条SQL语句查询出每门课都大于80分的学生姓名 Q2:表DEMO_DELTE如下,删除除了自动编号不同...

详细>>

2005开始支持XML数据类型

SQL Server2005开始支持XML数据类型,提供原生的XML数据类型、XML索引及各种管理或输出XML格式的函数。随着JSON的流行,...

详细>>

接下的的工作需要配置Sqlserver数据库允许远程访

当Microsoft Sqlserver 2012安装好后,接下的的工作需要配置Sqlserver数据库允许远程访问,只有配置了Sqlserver远程访问,其...

详细>>