MSSQL中递归SQL查询语句实例说明-

一张表(ColumnTable)的结构如下图所示

当前需要实现的功能:通过Number的值为67来获取当前的节点ID、父节点ID

递归实现SQL语句:


代码如下:

with znieyu as
(
select c.Id,c.FatherId,0 as lv1 from ColumnTable c where c.Number=67
union all
select c.Id,c.FatherId,lv1-1 from znieyu z
inner join ColumnTable c
on z.FatherId=c.Id
)
select znieyu.Id ,znieyu.FatherId,znieyu.lv1 as lv from znieyu

实现的效果:

满足条件67ID为6的递归-->6-->2(LV0)-->1(LV-1)-->0(LV-2)
满足条件67ID为8的递归-->8-->5(LV0)-->2(LV-1)-->1(LV-2)-->0(LV-3)
 很简单的一个SQL递归,记录下来...

(0)

相关推荐

  • SQL Server SQL高级查询语句小结

    Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from student; --count 统计 select count(*) from student; select count(sex) from student; select count(distinct sex) from student; --top

  • 基于mysql查询语句的使用详解

    1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ORDER BY userid LIMIT 3) ORDER BY userid DESC 但是运行的时候会报 This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery 这个的意思是表示子查询的时候不支持l

  • 基于SQL中的数据查询语句汇总

    where条件表达式--统计函数 复制代码 代码如下: Select count(1) from student; --like模糊查询--统计班上姓张的人数 复制代码 代码如下: select count(*) from student where realName like '张%'; --统计班上张姓两个字的人数 复制代码 代码如下: select count(*) from student where realName like '张_'; --统计班上杭州籍的学生人数 复制代码 代码如

  • 防SQL注入 生成参数化的通用分页查询语句

    使用这种通用的存储过程进行分页查询,想要防SQL注入,只能对输入的参数进行过滤,例如将一个单引号"'"转换成两个单引号"''",但这种做法是不安全的,厉害的黑客可以通过编码的方式绕过单引号的过滤,要想有效防SQL注入,只有参数化查询才是最终的解决方案.但问题就出在这种通用分页存储过程是在存储过程内部进行SQL语句拼接,根本无法修改为参数化的查询语句,因此这种通用分页存储过程是不可取的.但是如果不用通用的分页存储过程,则意味着必须为每个具体的分页查询写一个分页存储过程

  • SQl 跨服务器查询语句

    select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.dbo.表名 insert 本地库名..表名 select * from OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.dbo.表名 或使用联结服务器: --创建linkServer exec sp_addlinked

  • 关于SQL Server查询语句的使用

    一.查询第二个字母是t或者a的雇员的全部信息 复制代码 代码如下: select * from employees where firstname like '_[t,a]%' 注意:在sql中%表示字符串,所以不可像matlab一样用其注释,两个双斜线好像也不行,/**/可以,有网友说sql单行注释为-- 二.更改字段名 复制代码 代码如下: select '名字' = firstname ,'姓氏' = lastname from employees  where firstname lik

  • SQL查询语句通配符与ACCESS模糊查询like的解决方法

    ACCESS的通配符和SQL SERVER的通配符比较===================================================ACCESS库的通配符为:*   与任何个数的字符匹配?   与任何单个字母的字符匹配 SQL Server中的通配符为:% 与任何个数的字符匹配_ 与单个字符匹配正文我今天在写个页面的时候,也很郁闷,表中明明有记录,但在ASP里就是搜索不到,理论的sql语句如下:Select * FROM t_food Where t_food.name

  • SQL查询语句精华使用简要第1/2页

    一. 简单查询  简单的Transact-SQL查询只包括选择列表.FROM子句和Where子句.它们分别说明所查询列.查询的 表或视图.以及搜索条件等. 例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段. Select nickname,email FROM testtable Where name='张三' (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表.星号.表达式.变量(包括局部变 量和全局变

  • T-SQL 查询语句的执行顺序解析

    (5)SELECT (5-2) DISTINCT(5-3)TOP(<top_specification>)(5-1) <select_list> (1)FROM (1-J) <left_table> <join_type> JOIN <right_table> on <on_predicate> (2)WHERE <where_predicate> (3)GROUP BY <group_by_specificatio

  • SQL 查询语句积累

    2006-10-8表数据:tab1id    name  numA     a         9A     b       11B     f         7B     g         8所要结果:A   b    11B    g    8SQL 语句select * from tab1where (num in               (select max(num) from tabl group by id)           )解释说明,之所以要用子查询,目的是要取全部

随机推荐