一、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)
好了这篇文章就介绍到这了,希望能帮助到你。
本文向大家介绍sqlserver分页查询处理方法小结,包括了sqlserver分页查询处理方法小结的使用技巧和注意事项,需要的朋友参考一下 sqlserver2008不支持关键字limit ,所以它的分页sql查询语句将不能用MySQL的方式进行,幸好sqlserver2008提供了top,rownumber等关键字,这样就能通过这几个关键字实现分页。 下面是本人在网上查阅到的几种查询脚本的写法:
本文向大家介绍python通过socket查询whois的方法,包括了python通过socket查询whois的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python通过socket查询whois的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。
问题内容: 我有以下模型: 现在,我要查询具有活动Foo的Bar: 我收到诸如以下错误 我该如何实现? 问题答案: 你不能查询模型方法或属性。你可以在查询中使用其中的条件,也可以使用列表推导或Genex在Python中进行过滤。
我很难找到任何类型的文档,说明如何在我的模型中查询更复杂的属性。 关于这个查询创建是如何工作的,有没有更好的文档?
本文向大家介绍查询SQLServer启动时间的三种方法,包括了查询SQLServer启动时间的三种方法的使用技巧和注意事项,需要的朋友参考一下 上午在分析索引的使用情况,想看一下数据库什么时候启动的,确保统计的数据没有问题,可以使用下面三种方法查询:
本文向大家介绍Oracle SQL树形结构查询,包括了Oracle SQL树形结构查询的使用技巧和注意事项,需要的朋友参考一下 oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: 简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段: id,parentid那么通过