目录

谁为JoLynn工作?

使用hierarchyid函数回答

HierarchyID类型内置函数


在本文中,我们将介绍如何执行一个查询以获取层次结构的一部分。对于这个问题,我们将使用AdventureWorks数据库。

谁为JoLynn工作?

Employee表中隐藏的是AdventureWorks的组织结构。虽然HRIS专家擅长基本的SELECT和JOINS,但她很难找到向JoLynn Dobney报告的人。

你可以通过编写一些T-SQL来找到JoLynn的所有直接报告来帮助她吗?对于每个直接报告,输出其JobTitleFirst NameLast Name

写下你的查询,然后看看下面我是怎么做到的!

使用hierarchyid函数回答

在我们得到答案之前,让我们掌握一些术语。分层数据可以作为树。在下图中,您将看到组织结构图。树是颠倒的,因为它在页面上“分支”,而不是向天空。

请注意,树以Root开头,这是树的开头。

此外,树中的每个节点都连接到零个或多个其他节点。任何节点都可以被视为父节点。从中分支的任何节点都是节点。

使用家谱隐喻,父母有死者,即孩子。孩子们有祖先,父母和祖父母......

我老了,所以我习惯在数据库中使用的大部分分层数据都是parentID列的形式,是主键的外键。

例如,EmployeeID是主键,Manager ID是父键。

在adventure works数据库中,这是不同的。这里使用hierarchyid类型传达报告结构。此类型提供了使用一个字段关联父子关系的方法。

HierarchyID类型内置函数

hierarchyid值是散列值。它的值在于我们可以用来导航层次结构的内置函数,例如:

  • GetAncestor——返回当前行父级的hierarchyid。
  • GetDescendant——返回当前行的子级的hierarchyid。
  • GetRoot——返回层次结构的顶部(根)。

为了解决这个问题,我将使用GetAncestor函数返回父级hierarchyid。我们的想法是首先获取JoLynn的hierarchyid,然后返回祖先hierarchyid与她匹配的所有记录。

下面是我用来编写查询的代码。在第一部分中,我们得到了JoLynn的hierarchyid。

在第二部分中,我们得到了员工老板的等级制度。如果它与JoLynn的hierarchyid匹配,那么我们在结果中保留行...

--get direct reports
--Part 1:  Find JoLynn’s hierarchyID in Employee Database
DECLARE @CurrentEmployee HIERARCHYID;
SELECT @CurrentEmployee=OrganizationNode
FROM   HumanResources.Employee EINNER JOIN Person.Person P ONE.BusinessEntityID = P.BusinessEntityID
WHERE  P.FirstName ='JoLynn' AND P.LastName ='Dobney';--Part 2:  Find all direct reports for JoLynn
SELECT E.JobTitle,P.FirstName,P.LastName
FROM   HumanResources.Employee EINNER JOIN Person.Person P ONE.BusinessEntityID = P.BusinessEntityID
WHERE  OrganizationNode.GetAncestor(1)= @CurrentEmployee;

这是使用子查询编写相同代码的另一种方法!

SELECT E.JobTitle,P.FirstName,P.LastName
FROM   HumanResources.Employee EINNER JOIN Person.Person P ONE.BusinessEntityID = P.BusinessEntityID
WHERE  OrganizationNode.GetAncestor(1)=  (SELECT OrganizationNodeFROM   HumanResources.Employee EINNER JOIN Person.Person P ONE.BusinessEntityID = P.BusinessEntityIDWHERE  P.FirstName ='JoLynn' AND P.LastName ='Dobney')

子查询返回单个值,与我们将其保存到@currentEmployee的第一步中返回的值相同。

原文地址:https://www.codeproject.com/Articles/1279794/Use-hierarchyid-to-query-Hierarchical-data

使用hierarchyid查询分层数据相关推荐

  1. PHP和MySQL处理树状、分级、无限分类、分层数据的方法

    文章标题中的多个词语表达的其实是一个意思,就是递归分类数据,分级数据非常类似数据结构中的树状结构,即每个节点有自己的孩子节点,孩子结点本身也是父亲节点.这是一个递归.分层形式.可以称之为树形层级数据. ...

  2. mongodb存储数据_在MongoDB中存储分层数据

    mongodb存储数据 继续使用MongoDB进行 NoSQL之旅,我想谈一谈一个经常出现的特定用例:存储分层文档关系. MongoDB是很棒的文档数据存储,但是如果文档具有父子关系,该怎么办? 我们 ...

  3. 在MongoDB中存储分层数据

    继续使用MongoDB进行 NoSQL之旅,我想触摸一个经常出现的特定用例:存储分层文档关系. MongoDB是很棒的文档数据存储,但是如果文档具有父子关系怎么办? 我们可以有效地存储和查询此类文档层 ...

  4. php和mysql处理树状_分级_无限分类_分层数据的方法_PHP和MySQL处理树状、分级、无限分类、分层数据的方法...

    文章标题中的多个词语表达的其实是一个意思,就是递归分类数据,分级数据非常类似数据结构中的树状结构,即每个节点有自己的孩子节点,孩子结点本身也是父亲节点.这是一个递归.分层形式.可以称之为树形层级数据. ...

  5. 数据库分层数据现实方法

    分层数据 分层数据的每项(除根项)只有一个父项和零个或多个子项的数据集合. 分层数据存在于许多基于数据库的应用程序中,包括论文和邮件列表中的分类.组织层级关系.内容管理系统的分类.产品分类. 邻接表模 ...

  6. MyBatis中使用流式查询避免数据量过大导致OOM

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天mybatis查询数据库中大量的数据,程序抛出: java.lang.OutOfMemoryError: Java heap s ...

  7. oracle 查询本周数据生成下周数据

    CreateTime--2018年1月4日16:38:01 Author:Marydon oracle 查询本周数据生成下周数据 第一步:查询指定区间数据 第二步:改变查询结果的值 查询日期字段+7 ...

  8. php pdo 判断数据条数据,PDO一次查询一行数据

    这篇文章主要介绍的内容是关于PDO一次查询一行数据,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下<?php require 'pdo_edu_config.php'; try{ ...

  9. mysql本周函数_MySQL的YEARWEEK函数以及查询本周数据_MySQL

    bitsCN.com MySQL的YEARWEEK函数以及查询本周数据 MySQL 的 YEARWEEK 是获取年份和周数的一个函数,函数形式为 YEARWEEK(date[,mode]) 例如 20 ...

最新文章

  1. Linux内存管理Linux Memory Management Notes
  2. java求任意个数集合的笛卡尔积,Java中任意集的笛卡尔积
  3. 一文读懂 KMP 算法
  4. error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
  5. 【图文教程】Windows给Rabbitmq安装rabbitmq_delayed_meaage_exchange
  6. 贪心宝贝话说上回讲到海东集团面临内外交困,公司的元老也只剩下XHD夫妇二人了。显然,作为多年拼搏的商人,XHD不会坐以待毙的。 一天,当他正在苦思冥想解困良策的时候,突然想到了自己的传家宝,那是公司成
  7. 《web安全原理分析与实践》
  8. 四、FFI和第三方模块
  9. java设计triangle三角形_Java:【三角形类Triangle】设计一个名为Triangle的类来扩展GeometricObject类。该类包括:...
  10. JavaScript中的eval函数
  11. 在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示
  12. python发送短信接口_python 调用接口发短信
  13. Windows如何彻底删除.sys后缀的流氓文件
  14. 贵金属白银与美元的关系
  15. 前端Html的全新认识
  16. jsp学生体育成绩管理系统
  17. linux cpu使用率计算
  18. 机器学习实战——人脸表情识别
  19. 两台电脑互传文件你还可以这么做
  20. 服务器上建个新文件夹怎么共享打印机,新服务器怎样设置共享打印机

热门文章

  1. java 输出字符集合里的字_Java基础 -- 字符串(格式化输出、正则表达式)(示例代码)...
  2. 情人节甜蜜海报PSD分层模板,好想谈恋爱!
  3. 设计灵感|移动应用的可视化数据图表都是怎么设计的?
  4. 优秀的电商精品素材就到优图
  5. 设计资源类网站|日常必逛设计导航
  6. 弹窗设计UI素材模板|带你了解下弹窗特性
  7. pthread_detach():主线程与子线程分离,子线程结束后,资源自动回收
  8. HTTP缓存(HTTP Cacheing):缓存控制(Cache-Control)
  9. Python项目实践:绘制七段数码管
  10. linux系统kvm安装,快速搭建KVM及安装linux系统