通常用来实现树形结构

首先来看一下表数据

以下代码是递归查询北京市的树结构

WITH org AS (SELECT Code, name, parentCode, 1 AS levelFROM TestCity
WHERE code = '01'UNION ALLSELECT t1.Code, t1.name, t1.parentCode, t2.level + 1 AS levelFROM TestCity t1 INNER JOIN org t2ON t1.parentCode = t2.Code
)
SELECT
*
FROM org

  

注意:如果要在with表达式中计算,需要保证两边的type一致,如

WITH org AS (SELECT Code, name, parentCode, 1 AS level, tname = CAST('' as nvarchar(20))FROM TestCity
WHERE code = '01'UNION ALLSELECT t1.Code, t1.name, t1.parentCode, t2.level + 1 AS level, tanme = CAST(N'|--' + t2.tname as nvarchar(20))FROM TestCity t1 INNER JOIN org t2ON t1.parentCode = t2.Code
)
SELECT code ,parentCode, tname + name  as name
FROM org

  

再比较以下两段从StackOverFolw中摘来的代码

--报错 Types don't match between the anchor and the recursive part in column "nm" of recursive query "cte".
WITH cte AS (SELECT 1 as rn, 'name1' as nmUNION ALLSELECT rn + 1,nm = 'name' + CAST((rn + 1) as varchar(255))FROM cte a WHERE rn < 10)
SELECT *
FROM cte--正解
with cte as
(
select  1 as rn, CAST('name1' AS VARCHAR(255)) as nm
union all
select  rn+1,nm = CAST('name' + CAST((rn+1) as varchar(255)) AS VARCHAR(255))
from cte a where rn<10)
select * from cte

  

转载于:https://www.cnblogs.com/guangmangchen/p/6688883.html

with 关键字实现递归查询相关推荐

  1. Mysql8.0新特性之详细版本

    1. 账户与安全 用户创建与授权 之前:创建用户并授权 1 grant all privileges on *.* to 'myuser'@'%' identified by '3edc #EDC'; ...

  2. 同事问我MySQL怎么递归查询,我懵逼了...

    前言 最近在做的业务场景涉及到了数据库的递归查询.我们公司用的 Oracle ,众所周知,Oracle 自带有递归查询的功能,所以实现起来特别简单. 但是,我记得 MySQL 是没有递归查询功能的,那 ...

  3. B-tree结构菜单的递归查询

    有层次结构的菜单树,后台库表结构通常会设计为B-tree结构, 就是菜单节点上有一个PID字段,记录自己的父节点号, 通过这种自关联的方式隐含树的层次结构,如: CREATE TABLE T_MENU ...

  4. oracle递归查询子节点

    通过子节点向根节点追朔. select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid 通过根节 ...

  5. oracle 递归查询

    --本文章可以直接粘贴到PLSQL运行,测试表就自己创建吧 --测试名称:测试oracle递归   --oracle版本:oracle8i --样表:s_coalarea_test(地区表) --表结 ...

  6. mysql实现树形_Mysql实现树形递归查询

    最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造. Oracle递归查询 oracle实现递归 ...

  7. 使用SQL进行递归查询

    在工作当中会经常用到递归,比如菜单的展示.一种方法就是从数据库中取出所有的数据,然后在程序中循环获取符合条件的数据.另外一种方法就是使用SQL直接读取符合条件的数据.对于递归查询,T-SQL和PL/S ...

  8. 在oracle中通过connect by prior来实现递归查询!

    connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start by cond1 connect by cond2 where cond3; ...

  9. oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询

    今天发现在oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: select . ...

最新文章

  1. ZJU-java进阶笔记 第一、二周(类与对象,对象交互)
  2. 找出数组中不重复的值php_PHP查找数值数组中不重复最大和最小的10个数的方法...
  3. 2020 诺贝尔奖「第一棒」:英美三位科学家摘得桂冠!
  4. 使用了未赋值的局部变量_macOS上的汇编入门(七)——字面量与局部变量
  5. 局部特征检测器和描述符
  6. 【贪心】【高精度】zoj3987 Numbers
  7. 广州运营开放式数据交易平台发力大数据业务
  8. java byreference_Java中各种引用(Reference)解析
  9. 自建latex服务器,通过在线服务器编译LaTeX
  10. linux日志文件优缺点,Linux日志文件总结
  11. LCP 19. 秋叶收藏集
  12. java时间转化类,一小时前,刚刚一个月前
  13. Enterprise Library v5.0 -- Data Access Application Block 开发向导(2)
  14. 解决PyCharm调试查看变量时一直显示collecting data
  15. 7000个源码批量下载---复制来的
  16. 微服务 注册中心的作用_微服务-服务与注册中心
  17. 里奥·梅西(Lionel Messi)-----球场上舞动的红蓝精灵
  18. Excelize 发布 2.6.0 版本,功能强大的 Excel 文档基础库
  19. nginx的安装以及简单代理域名
  20. 使Twitter数据对百事可乐和可口可乐进行客户情感分析

热门文章

  1. Leetcode-53:最大子序和
  2. python实现货币转换
  3. [BUUCTF-pwn]——not_the_same_3dsctf_2016
  4. java碳架公路车如何_骑全碳公路车是怎样的体验?
  5. 计算机职称在线考试报名系统,2020年计算机职称考试网上如何报名
  6. CSS的几个属性display,float,clear,overflow,visibility
  7. 数据仓库—数据仓库—Sybase IQ 介绍
  8. 关于 Unloading class sun.reflect.GeneratedSerial...
  9. Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)
  10. Java路径问题最终解决方案