获取指定部门编号及其所属的所有或指定层次的下级部门的记录集

用 INNER JOIN语法联接多个表建记录集 多表联接建立记录集是十分有用的,因为某些情况下,我们需要把数字数据类型显示为相应的文本名称,这就遇到了多表联接建立记录集的问题。比如作一个会员注册系统,共有五个表,会员信息数据表member、会员身份表MemberIdentity、会员权限表MemberLevel、会员类别表MemberSort和会员婚姻状况表Wedlock。如果想把会员注册信息全部显示出来,肯定要将这四个表连起来,否则大家看到的 阅读详情

 在开发数据库应用程序中,我们经常需要表示多层次关系的数据,譬如:MRP中的BOM,多级别的组织结构,多级的角色关系…… 在数据库中描述这种关系时,我们通常使用父节点指向的方式来设计表结构,譬如对部门的表结构定义如下:

  CREATE TABLE TDepartment
  (
    ParentNo varchar(25),    /* 上级部门编号,如果为NULL则表示当前记录为顶级部门。 */
    DepartmentNo varchar(25) PRIMARY KEY CLUSTERED, /* 当前部门编号,主关键字段。 */
    Name  nvarchar(100) NOT NULL,   /* 部门名称。 */
    NameEx  nvarchar(100),    /* 扩展名称。 */
    Remark  nvarchar(500)    /* 备  注。 */
  )

  功能需求:获取指定部门编号及其所属的所有或指定层次的下级部门的记录集。

  在以往的开发中,我们通常是在客户端或者中间层来处理以上需求的,一般是通过编程语言(VB、Delphi、Java/.NET)来处理从数据库返回的记录集,这种方式通常需要从数据库获得整个表的记录,因为我们不能确定给定主键所具有的哪些下级记录,然后再在编程代码中使用递归的方式来获取相关的下级记录。这种使用递归的方式,通常难以避免数据中非法记录所引起的死循环问题(当然,你也可以处理这种问题,只是有些麻烦,而且通常也不够优美)。那么,能不能在数据库中就处理好这个问题呢,这样既能减少不必要的数据传输,又能避免使用递归所带来的负面影响,最好还能自动屏蔽掉非法数据指向的问题(当前记录的父指针字段指向其某个下级记录)。
  呵呵,卖弄完毕,亮出匕首(代码,Transact-SQL/MS-SQLServer 2000):

/* Copyright all(c) 2004 钟峰(ZhongFeng), http://SW515.cnblogs.com */
CREATE PROCEDURE dbo.PSelectDepartmentHierarchy
  @DepartmentNo    varchar(25),
  @Depth           int  = -1
AS
  SET NOCOUNT ON

  DECLARE @TStack TABLE
  (
    Indicator varchar(50)
  )

  DECLARE @Index int
  SET @Index = 0

  INSERT INTO @TStack
    SELECT DepartmentNo
    FROM dbo.TDepartment
    WHERE DepartmentNo LIKE @DepartmentNo

  WHILE @@ROWCOUNT > 0 AND (@Index < @Depth OR @Depth < 0)
  BEGIN
    SET @Index = @Index + 1

    INSERT INTO @TStack
      SELECT DepartmentNo
      FROM dbo.TDepartment
      WHERE
        ParentNo IN (SELECT Indicator FROM @TStack) AND
        
DepartmentNo NOT IN (SELECT Indicator FROM @TStack)
  END

  SELECT dbo.TDepartment.*
  FROM @TStack AS t
    INNER JOIN dbo.TDepartment ON
      t.Indicator = dbo.TDepartment.DepartmentNo
GO

SQL12 获取每个部门中当前员工薪水最高的相关信息 描述 有一个员工表dept_emp简况如下: 有一个薪水表salaries简况如下: 获取每个部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号dept_no升序排列,以上例子输出如下: (注意: Mysql与Sqlite select 非聚合列的结果可能不一样) /*题目:获取每个部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary, 按照部门编号dept_no升序排列 语法: 阅读详情

相关推荐

从零搭建 AI 运维 Agent:告警自动诊断 + 修复的完整技术方案

适合读者:管理 5-50 台服务器的运维/SRE 工程师、技术负责人 技术栈:FastAPI + React + PostgreSQL + Redis + DeepSeek 关键词:AI运维、AIOps、自动化运维、智能告警、告警修复、Runbook自动化、DevOps、SRE、DeepSeek运维

weixin_38359457的博客 1640

MySQL 根据 部门ID 查询当前部门&部门下的所有子级部门

MySQL 根据 部门ID 查询当前部门&部门下的所有子级部门 可以直接拷贝使用

孤er尽悲欢绝的博客 1677

保姆级教程:用R语言自动化处理FAERS季度数据(从文件合并到删除废弃Case)

本文提供了一份详细的R语言教程,指导如何自动化处理FAERS季度数据,包括文件合并和删除废弃Case。通过使用tidyverse、fs等R包,构建健壮的自动化流程,特别适合药物安全监测领域的数据分析师。教程涵盖环境准备、智能合并多季度数据、精准删除废弃Case等关键步骤,并提供了错误处理与日志记录的实用技巧。

weixin_42701915的博客 124

mysql 查询某个部门下所有的子级部门

这里主要是使用循环遍历查询,其中注意的是两边的查询字段必须是一模一样的,不然会报错。

weixin_45560393的博客 1714

BMS短路测试避坑指南:从炸管到稳定,我是如何搞定MOS管和TVS的

本文详细记录了BMS短路测试中MOS管和TVS的优化过程,从驱动电阻调整、PCB寄生参数控制到TVS选配策略,提供了一套实用的调试方法论。通过实战案例解析,帮助工程师避免常见陷阱,实现稳定可靠的短路测试性能。

weixin_30652897的博客 140

Windows10环境下激活虚拟环境报错【source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称】

在使用Django创建Web程序前,需要创建一个虚拟的工作环境,在使用【source ll_env/bin/activate】命令激活虚拟环境时报错:source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 2。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1万+

获取指定部门编号及其所属的所有或指定层次的下级部门的记录集。

  在开发数据库应用程序中,我们经常需要表示多层次关系的数据,譬如:MRP中的BOM,多级别的组织结构,多级的角色关系…… 在数据库中描述这种关系时,我们通常使用父节点指向的方式来设计表结构,譬如对部门的表结构定义如下:  CREATE TABLE TDepartment  (    ParentNo varchar(25),    /* 上级部门编号,如果为NULL则表示当前记录为顶级部门。

David Yan的专栏 1465

第三天:Python基础语法详解

Python代码规范与注释最佳实践 摘要: 本文深度解析Python缩进规则与代码结构的技术规范,包括缩进的底层原理、语法规则和错误处理。详细阐述Python注释系统,涵盖行内注释、文档字符串和类型注释等多种形式,并提供工业级代码组织方案。研究显示,良好的缩进可提升40%的代码识别速度,降低50%的认知负荷。文章还对比了Sphinx、pdoc等主流文档生成工具,给出企业级项目中的注释编写原则和模板建议,帮助开发者构建更可维护的Python代码。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1011

[转载]超强存储过程!原作,版权所有!精悍!!!

  在开发数据库应用程序中,我们经常需要表示多层次关系的数据,譬如:MRP中的BOM,多级别的组织结构,多级的角色关系…… 在数据库中描述这种关系时,我们通常使用父节点指向的方式来设计表结构,譬如对部门的表结构定义如下:  CREATE TABLE TDepartment  (    ParentNo varchar(25),    /* 上级部门编号,如果为NULL则表示当前记录为顶级部

Maverick Leo随笔 851

最新Anaconda3的安装配置及使用教程(详细过程)

最新Anaconda3安装使用Anaconda下载方式一:官网下载方式二:清华镜像下载(推荐)Anaconda安装 Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项 Anaconda + Jupyter 基本上已经是大部分机器学习/数据分析等开发者标配的开发环境, 不多介绍,直接进去正题: Anaconda下载 方式一:官网下载 下载地址传送门: 官网首页:https://www.anaconda.com/ 官网下载页:https://www

HowieXue 薛永浩的博客 34万+

五十天精通硬件设计第6天-放大器知识及选型

运算放大器(Operational Amplifier,简称运放)是一种高增益的直流耦合差分放大器,广泛应用于信号处理、滤波、比较、积分、微分等电路中。

whm128的博客 593

树操作

在开发数据库应用程序中,我们经常需要表示多层次关系的数据,譬如:MRP中的BOM,多级别的组织结构,多级的角色关系…… 在数据库中描述这种关系时,我们通常使用父节点指向的方式来设计表结构,譬如对部门的表结构定义如下:   CREATE TABLE TDepartment  (    ParentNo varchar(25),    /* 上级部门编号,如果为NULL则表示当前记录为顶级部门。

Buffalo's Blog 1085

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

超强存储过程!原作,版权所有!精悍!!!

 在开发数据库应用程序中,我们经常需要表示多层次关系的数据,譬如:MRP中的BOM,多级别的组织结构,多级的角色关系…… 在数据库中描述这种关系时,我们通常使用父节点指向的方式来设计表结构,譬如对部门的表结构定义如下:  CREATE TABLE TDepartment  (    ParentNo varchar(25),    /* 上级部门编号,如果为NULL则表示当前记录为顶级部门。

1410

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

超强存储过程!

在开发数据库应用程序中,我们经常需要表示多层次关系的数据,譬如:MRP中的BOM,多级别的组织结构,多级的角色关系…… 在数据库中描述这种关系时,我们通常使用父节点指向的方式来设计表结构,譬如对部门的表结构定义如下:  CREATE TABLE TDepartment  (    ParentNo varchar(25),    /* 上级部门编号,如果为NULL则表示当前记录为顶级部门。 *

leebons的专栏 579

超强存储过程

 在开发数据库应用程序中,我们经常需要表示多层次关系的数据,譬如:MRP中的BOM,多级别的组织结构,多级的角色关系…… 在数据库中描述这种关系时,我们通常使用父节点指向的方式来设计表结构,譬如对部门的表结构定义如下:  CREATE TABLE TDepartment  (    ParentNo varchar(25),    /* 上级部门编号,如果为NULL则表示当前记录为顶级部门。

lanbaibai的专栏 663

用 SQL 得到 Access 的随机记录集

关于用 SQL 得到 Access 的随机记录集SQL Server 2000:SELECT TOP n * FROM tanblename ORDER BY NEWID()Access:SELECT TOP n * FROM tanblename ORDER BY rnd([一个自动编号字段]) RandomizeSELECT TOP 5 [TestTitle] FROM [Te

Kevin 1052

操作多个表_1_记录集的叠加

记录集的叠加 需求描述 需求:查询雇员表里部门编号是10的员工名和部门编号以及部门表里的部门名称和部门编号。 解决方法:这里需要用到union all关键词,因为是两个结果集的叠加。首先查询出emp表的empno,deptno再union all dept表里的deptname,deptno。 注: 数据库数据集SQL脚本详见如下链接地址 员工表结构和数据初始化SQL脚本 SQL代码 -- Mysql、Sql server、O...

数据科学汇集 164

易语言mysql 记录集_易语言 数据库连接组件和记录集组件应用

之前一直用edb,就是易语言自带的数据库,效率很慢于是开始学习access,结果还是有很多弊端,不过既然学了一下,就记录一下。数据库连接组件和记录集组件是一起用的。精易模块有“类_ODBC数据库”可以操作Access和SQLServer,原理和组件差不多,可以互相参考。mdb可以有多个表,而edb只有一个表本文记录一下组件命令的应用,主要是数据库的,打开,关闭,读,写,改,查,删assess数据库...

weixin_39793105的博客 1485

如何插入Access库记录后马上得到自动编号值

如何插入Access库记录后马上得到自动编号值 首先须保证获得记录集的方式支持bookmark属性,如1,3插入一条带自动编号字段的记录后,获取该记录的bookmark属性值temp = rs.bookmark然后rs.bookmark = temp试试!!Response.write rs.Fields("ID").  

711

Access 连续窗体怎么显示行号?排序筛选后仍自动编号

Access 连续窗体没有现成的行号字段,直接使用 CurrentRecord 又容易让每一行显示相同数字。本文用 RecordsetClone 按窗体当前记录顺序计算序号,排序和筛选后仍能重新编号,而且不改数据表结构

308

插入Access记录后马上得到自动编号值的方法

如何插入Access库记录后马上得到自动编号值?  首先须保证获得记录集的方式支持bookmark属性,如1,3。  插入一条带自动编号字段的记录后,获取该记录的bookmark属性值:  temp = rs.bookmark  然后:  rs.bookmark = temp  试试:  Response.write rs.Fields("ID")

网络文档(Lonz) 3976

查询部门人数超过3个的部门编号_Excel用VBA连接Access数据库查询窗体实例

“连接数据库,并将筛选后的语句写入建立的窗体中,便于查阅”01—窗体样式02—代码实例Option Explicit '打开强制声明Dim con As ADODB.Connection '声明连接对象变量Dim rs As ADODB.Recordset '声明记录集对象变量'一、窗体加载事件,加载去重后的部门名称Private Sub UserFo...

weixin_39628864的博客 810
上一篇: 删除TFS项目
下一篇: CSS控制层 屏幕居中
suchgoingdown
博客等级 码龄19年 4粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值