SQLSERVER2005 中树形数据的递归查询
问题描述。借用了adinet的问题。参见:http://www.jb51.net/article/28670.htm
今天做项目遇到一个问题,
有产品分类A,B,C顶级分类,
期中A下面有a1,a2,a3子分类.
但是a1可能共同属于A和B,然后我的数据库是这样设计的
id | name | parnet |
1 | A | 0 |
2 | B | 0 |
3 | a1 | 1,2 |
如果想要查询A的所有子类的话就要查询parent中包含1的,所以就萌生了这个办法.呵呵,
解决方案
代码如下:
with cte as
(select * from tb where id='1'
union all
select tb.* from tb join cte on charindex(cast(cte.id as varchar(10)),tb.parentid)>0)
select * from cte
相关推荐
-
SQLSERVER2008中CTE的Split与CLR的性能比较
我们新建一个DataBase project,然后建立一个UserDefinedFunctions,Code像这样: 复制代码 代码如下: 1: /// <summary> /// SQLs the array. /// </summary> /// <param name="str">The STR.</param> /// <param name="delimiter">The delimiter.&l
-
使用SqlServer CTE递归查询处理树、图和层次结构
CTE(Common Table Expressions)是从SQL Server 2005以后版本才有的.指定的临时命名结果集,这些结果集称为CTE. 与派生表类似,不存储为对象,并且只在查询期间有效.与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次.使用CTE能改善代码可读性,且不损害其性能. 递归CTE是SQL SERVER 2005中重要的增强之一.一般我们在处理树,图和层次结构的问题时需要用到递归查询. CTE的语法如下 WITH CTE AS ( SELECT Em
-
使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法
下面是一个简单的Family Tree 示例: 复制代码 代码如下: DECLARE @TT TABLE (ID int,Relation varchar(25),Name varchar(25),ParentID int) INSERT @TT SELECT 1,' Great GrandFather' , 'Thomas Bishop', null UNION ALL SELECT 2,'Grand Mom', 'Elian Thomas Wilson' , 1 UNION ALL SELE
-
sqlserver另类非递归的无限级分类(存储过程版)
下面是我统计的几种方案: 第一种方案(递归式): 简单的表结构为: CategoryID int(4), CategoryName nvarchar(50), ParentID int(4), Depth int(4) 这样根据ParentID一级级的运用递归找他的上级目录. 还有可以为了方便添加CategoryLeft,CategoryRight保存他的上级目录或下级目录 第二种方案: 设置一个varchar类型的CategoryPath字段来保存目录的完整路径,将父目录id用符号分隔开来.比
-
在sqlserver中如何使用CTE解决复杂查询问题
最近,同事需要从数个表中查询用户的业务和报告数据,写了一个SQL语句,查询比较慢: Select S.Name, S.AccountantCode, ( Select COUNT(*) from ( Select Distinct BusinessBackupId from Biz_BusinessBackupCustomer where Id in ( Select BusinessBackupCustomerId from Rpt_RegistForm where ( SignatureCP
-
SqlServer使用公用表表达式(CTE)实现无限级树形构建
SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存.可以使用CTE来执行递归操作. DECLARE @Level INT=3 ;WITH cte_parent(CategoryID,CategoryName,ParentCategoryID,Level) AS ( SELECT c
-
SQLSERVER2005 中树形数据的递归查询
问题描述.借用了adinet的问题.参见:http://www.jb51.net/article/28670.htm 今天做项目遇到一个问题, 有产品分类A,B,C顶级分类, 期中A下面有a1,a2,a3子分类. 但是a1可能共同属于A和B,然后我的数据库是这样设计的 id name parnet 1 A 0 2 B 0 3 a1 1,2 如果想要查询A的所有子类的话就要查询parent中包含1的,所以就萌生了这个办法.呵呵,解决方案 复制代码
-
PostgreSQL树形结构的递归查询示例
背景 处理不确定深度的层级结构,比如组织机构,一个常用的设计是在一张表里面保存 ID 和 Parent_ID ,并且通过自联结的办法构造一颗树.这种方式对写数据的过程很友好,但是查询过程就变得相对复杂.在不引入MPTT模型的前提下,必须通过递归算法来查询某个节点和下级子节点. Oracle提供的connect by扩展语法,简单好用.但是其他的RDBMS就没这么人性化了(或者我不知道).最近在项目中使用PostgreSQL来查询树形数据,记录一下. 构造样本数据 drop table if ex
-
MyBatis实现两种查询树形数据的方法详解(嵌套结果集和递归查询)
目录 方法一:使用嵌套结果集实现 1,准备工作 2,实现代码 方法二:使用递归查询实现 树形结构数据在开发中十分常见,比如:菜单数.组织树, 利用 MyBatis 提供嵌套查询功能可以很方便地实现这个功能需求.而其具体地实现方法又有两种,下面分别通过样例进行演示. 方法一:使用嵌套结果集实现 1,准备工作 (1)假设我们有如下一张菜单表 menu,其中子菜单通过 parendId 与父菜单的 id 进行关联: (2)对应的实体类如下: @Setter @Getter public class M
-
Oracle递归查询树形数据实例代码
目录 概述 1.数据准备 2 start with connect by prior递归查询 2.1 查询所有子节点 2.2 查询所有父节点 2.3 查询指定节点的根节点 2.4 查询下行政组织递归路径 3 with递归查询 3.1 with递归子类 3.2 递归父类 4 MySQL 递归查找树形结构 总结 概述 实际生活有很多树形结构的数据,比如公司分为多个部门,部门下分为多个组,组下分为多个员工:省市县的归属:页面菜单栏等等. 如果想查询某个节点的父节点或者子节点,一般通过表自身连接完成,但
-
浅谈MYSQL中树形结构表3种设计优劣分析与分享
目录 简介 问题 设计1:邻接表 表设计 SQL示例 设计2:路径枚举 表设计 SQL示例 设计3:闭包表 表设计 SQL示例 结合使用 表设计 总结 简介 在开发中经常遇到树形结构的场景,本文将以部门表为例对比几种设计的优缺点: 问题 需求背景:根据部门检索人员, 问题:选择一个顶级部门情况下,跨级展示当前部门以及子部门下的所有人员,表怎么设计更合理 ? 递归吗 ?递归可以解决,但是势必消耗性能 设计1:邻接表 注:(常见父Id设计) 表设计 CREATE TABLE `dept_info01
-
js实现树形数据转成扁平数据的方法示例
利用递归的方法循环树形数组,当遇到有children的对象再次调用递归函数循环children数组,每次循环的数据放入一个提前声明好的数组里,等所有递归函数执行完,这个数组即是想要得到的扁平数据数组. let res = [] const fn = (source)=>{ source.forEach(el=>{ res.push(el) el.children && el.children.length>0 ? fn(el.children) : ""
-
解决ant design vue中树形控件defaultExpandAll设置无效的问题
页面步骤: 1.设置a-tree标签 2.默认的treeNodes值设置为空数组 3.在mounted组件加载的时候给treeNodes的值赋值 结果: 设置defaultExpandAll无效,并不能展开所有节点 原因: defaultExpandAll 仅在组件第一次渲染时有效,不仅仅tree组件,其它组件的defaultXXX值都是这个行为, 可以自行搜索受控组件/非受控组件的概念.如果你想异步获取数据后展开全部结点,可以使用非受控方式: https://codepen.io/lovefe
-
Vue组件库ElementUI实现表格加载树形数据教程
ElementUI实现表格树形列表加载教程,供大家参考,具体内容如下 Element UI 是一套采用 Vue 2.0 作为基础框架实现的组件库,一套为开发者.设计师和产品经理准备的基于 Vue 2.0 的组件库,提供了配套设计资源,帮助网站快速成型 关键代码,在el-table添加属性, :tree-props="{children: 'children'}" ,注意row必须命名为children,官网也进行了说明: 支持树类型的数据的显示.当 row 中包含 children 字
-
教你如何使用Java8实现菜单树形数据
Java8实现菜单树形数据 当我们打开京东商城时,左侧的菜单依次分为三级展示,这是如何实现的呢? 本篇暂不讲述前端,只讲述如何使用java8 的lamada表达式实现树形数据的拼装 1.创建菜单表 CREATE TABLE `pms_category` ( `cat_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类id', `name` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NU
-
WPF中的数据模板用法介绍
数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列表,列表控件, 可以修改其中的ItemTemplate. 3.修改ContentTemplate, 例UserControl控件的数据展现形式. CellTemplate 模板 下面用一个例子, 来演示CellTemplate使用.例子实现一个DataGrid 展示一个普通的数据标, 同时新增一列C
随机推荐
- C#防SQL注入代码的三种方法
- 一张图看尽Linux内核运行原理
- iOS 雷达效果实例详解
- iOS表情键盘的简单实现代码
- .NET Core 2.0迁移小技巧之web.config 配置文件示例详解
- JavaScript 监控微信浏览器且自带返回按钮时间
- 手把手教你打印出PDF(关于fpdf的简单应用)
- python统计文本字符串里单词出现频率的方法
- 浅谈ctrl+c,ctrl+d,ctrl+z在linux中的意义
- MySQL外键约束的禁用与启用命令
- Javascript动态创建div的方法
- js加解密 脚本解密
- Windows 系统组策略应用全攻略(下)第1/3页
- c# Winform 程序自动更新实现方法
- Java获得当前时间前指定几个小时具体时间的方法示例
- 详解次小生成树以及相关的C++求解方法
- .net文件上传时实现通过文件头确认文件类型的方法
- Android 开发中线程的分析
- Vuex 快速入门(简单易懂)
- vue使用v-for实现hover点击效果