在SQL Server里边执行父子关系查询,第一时间想到的应该是CTE(要是对CTE不太了解,可以参考这篇,讲的超详细),它兼顾了union all和递归的属性,用起来简单效率也不错。好啦,言归正传,先说说测试的基本信息:
数据库版本:SQL Server2005(CTE从2005开始支持的,2005以下的都不支持这个)
所用表:s_user
字段对应关系:S_USER_ID是其他记录的S_USER_SJ_ID。
SQL如下:
WITH result AS ( SELECT * FROM S_USER su WHERE su.S_DEPARTMENT_ID in (5) and (su.s_user_id=84) UNION ALL SELECT child.* FROM S_USER AS child INNER JOIN result AS result ON child.S_USER_SJ_ID = result.s_user_id ) SELECT S_USER_ID,S_DEPARTMENT_ID,S_Department_Name,S_USERNAME,S_USER_SJ_NAME,S_USER_SJ_ID FROM result order by S_USER_SJ_ID ;
以上的SQL中有个问题,就是user的S_DEPARTMENT_ID和s_user_id是写死的,不能根据实际情况直接进行查询,如此就需要引入参数的问题了。实现思路如下:
将以上的查询信息定义到一个自定义的方法中,该方法带两个参数,然后将查询结果以table的形式返回,最后直接调用该方法。
具体实现SQL如下:
CREATE FUNCTION fu_userInfo ( @departmentid nvarchar(30),@userid nvarchar(30) ) RETURNS table AS RETURN ( WITH result AS ( SELECT * FROM S_USER su WHERE su.S_DEPARTMENT_ID in (@departmentid) and (su.s_user_id=@userid) UNION ALL SELECT child.* FROM S_USER AS child INNER JOIN result AS result ON child.S_USER_SJ_ID = result.s_user_id ) SELECT S_USER_ID,S_DEPARTMENT_ID,S_Department_Name,S_USERNAME,S_USER_SJ_NAME,S_USER_SJ_ID FROM result ) --执行查询 SELECT * FROM fu_userInfo(5,84) order by S_USER_SJ_ID
参考链接:
1、Sql Server父子关系迭代查询SQL:http://terry0501.iteye.com/blog/1896929
2、在SQL Server中,关于with as使用介绍:http://jc-dreaming.iteye.com/blog/772030
3、sql server 视图中定义参数:http://www.cnblogs.com/qanholas/archive/2012/07/19/2599613.html
相关推荐
在SQL Server 2005及以上版本,还可以使用公用表表达式(CTE)进行递归查询,以更简洁的方式完成相同的功能。 2. 查找所有父节点(反向递归): 与查找子节点相反,我们从一个节点开始,向上查找其所有父节点直至根...
本文件"sqlserver父子层次查询.pdf"主要探讨了如何使用递归公共表表达式(Recursive Common Table Expression, CTE)来解决这类问题。下面将详细解释相关知识点。 1. **递归公共表表达式(Recursive CTE)**: ...
### SQL查询某个parentId下的所有childId 在数据库管理和应用开发中,经常需要查询某一特定节点下的所有子节点信息。例如,在组织结构、产品分类等层级数据管理中,我们需要获取某个父级分类的所有子分类,包括直接...
- (B) 层次型:另一种早期的数据库模型,支持单一的父子关系。 - (C) 关系型:基于关系模型的数据库系统。 - (D) 以上都不是 - **正确答案**:(C) 关系型。 - **知识点说明**:SQL Server 2000是一种关系型...
- **创建父子层次的多维数据集**:维向导可以帮助创建具有父子关系的多维数据集。 - **创建虚拟维度**:通过维向导也可以创建虚拟维度,这类维度不直接对应于物理表,而是根据实际需求动态生成。 #### 四、利用分析...
树形菜单是一种以层级结构展示数据的UI元素,它模仿了自然界中的树状结构,通常用于呈现具有父子关系的数据。在ASP.NET中,我们可以使用TreeView控件来创建这样的菜单。 1. **TreeView控件**:ASP.NET内置的...
这些信息可以存储在一个具有父子关系的表格中,通常包含字段如`DirectoryID`,`ParentDirectoryID`,`DirectoryName`等。 接下来,我们将使用ADO.NET连接到SQL Server数据库,执行查询并遍历结果集,为每个目录创建...
公用表表达式(CTE,Common Table Expression)是SQL Server中的一个重要特性,它允许你在复杂的查询中定义一个临时的结果集,这个结果集只在当前查询的执行范围内有效。CTE可以用于SELECT、INSERT、UPDATE、DELETE...
- 数据源:通常来自数据库,如SQL Server 2000,其中表的字段可能包括ID、父ID和节点名称等,用于构建父子关系。 - 数据绑定:将数据源与TreeView控件绑定,通过HierarchicalDataTemplate定义每个节点的显示样式和...
42. 父子格关系:父子格关系包括嵌套和关联两种形式。 43. 填报界面控件:某些控件如表格控件在填报界面中可能不可用。 44. 数据迁移支持的数据库类型:包括MySQL、Oracle、SQL Server、DB2、PostgreSQL等。 45. ...
首先,你需要有一个包含层级关系的数据表,通常这样的表会有一个字段表示父节点ID,用于建立父子节点的关系。例如,我们可以有如下的表结构: 1. 表名:TreeNodes 2. 字段:NodeID(主键,唯一标识),ParentNodeID...
对于树形结构,通常需要一个表示层级关系的字段,如“ParentID”或“CategoryID”,这样可以根据这些字段构建父子关系。 4. **填充Treeview**:使用Treeview的AddChild、AddChildFirst等方法添加节点。每个数据库...
"100126c_父子关系树及下级数量统计.sql"继续深化了对层级数据的理解,可能包含了递归查询或者自连接来获取树状结构的子节点总数。 最后,"20100202_很多项.sql"虽然没有明确的主题,但很可能包含了一系列不同的SQL...
1. **数据准备**:确保你的数据库中包含了父子关系的数据模型。这可能涉及到多维数据集或者关系数据库中的关联表。 2. **报表设计**:使用 Reporting Service 的 Report Designer 创建报表,并设置参数以允许用户...
节点之间存在父子关系,一个节点可以有多个子节点,但只有一个父节点(根节点除外)。这样的结构便于实现诸如添加新节点、删除已有节点和修改节点信息等操作。 在SQLServer数据库中,存储学校层次关系的方法有两种...
JEECG框架还支持多种数据库,包括但不限于SQLServer、Oracle和MySQL。该框架还抽象出了单表数据模型和一对多(父子表)数据模型,可以根据这些模型生成多套不同的展示形式,使得开发过程更加高效和简洁。 JEECG还...
在MIS系统开发中,`DataGridView`常用于展示大量结构化的数据,如报表、记录列表,而`TreeView`则适合展示非线性、具有父子关系的信息,如部门结构或文件目录。 结合使用这两个控件,开发者可以创建出既直观又易于...
- **表的关联关系**:通过`F3`键查看字段所指向的表以及父子表关系。 #### 六、字段类型与表结构设计 - **字段类型**: - **指向关系**:`DesignativeReference`,用于表示字段之间的指向关系。 - **多选类型**...