当前位置: 首页 > 面试题库 >

选择同一表关系中的所有父级或子级SQL Server

万俟招
2023-03-14
问题内容

SQL开发人员,我有一个计划不周的数据库作为任务,以学习有关SQL Server 2012的很多知识。

所以,有表Elem

+-----------+----+---+----------+------------+
|VERSION(PK)|NAME|KEY|PARENT_KEY|DIST_KEY(FK)|
+-----------+----+---+----------+------------+
|1          |a   |12 |NULL      |1           |
+-----------+----+---+----------+------------+
|2          |b   |13 |12        |1           |
+-----------+----+---+----------+------------+
|3          |c   |14 |13        |1           |
+-----------+----+---+----------+------------+
|4          |d   |15 |12        |1           |
+-----------+----+---+----------+------------+
|5          |e   |16 |NULL      |1           |
+-----------+----+---+----------+------------+
|6          |e   |17 |NULL      |2           |
+-----------+----+---+----------+------------+

更新该行后,我需要检查element的父键,以不允许element自anny之类。

当我删除该行时,我需要删除所有孩子以及孩子的孩子,等等。

问题是:

  1. 如何选择DIST的一个元素的所有“父母+祖父母+等等”?

  2. 我如何选择DIST元素中的所有“儿子+孙子+等”?

我读过有关使用CTE的解决方案的信息,但是我没有任何基础,甚至无法理解那时如何使用CTE。

请帮忙!

谢谢。


问题答案:

我已经遇到了这个问题by通过这种方式解决了问题

 --all  "parent + grandparent + etc" @childID Replaced with the ID you need

with tbParent as
(
   select * from Elem where [KEY]=@childID
   union all
   select Elem.* from Elem  join tbParent  on Elem.[KEY]=tbParent.PARENT_KEY
)
 SELECT * FROM  tbParent
 --all "sons + grandsons + etc" @parentID Replaced with the ID you need

with tbsons as
(
  select * from Elem where [KEY]=@parentID
  union all
  select Elem.* from Elem  join tbsons  on Elem.PARENT_KEY=tbsons.[KEY]
)
SELECT * FROM tbsons

PS。我的英语不好。



 类似资料:
  • 我有以下html: 正如你所看到的那样。子列表div总是跟在带和一些文本的后面,就像div是h2的子列表一样(h2是子列表的标题)。另一个包含锚定标记。 我想得到div. sublist之前的所有h2标签。 这是我当前的xpath子句: 我最终得到了不同的元素(a、div、img),但h2元素。

  • 问题内容: 假设我有两个表,“父母”和“孩子”。父子关系是一个多对多关系,可通过标准的交叉引用表来实现。 我想查找使用SQL(特别是MS SQL Server的T-SQL; 2005语法可以接受)的给定子集的所有成员所引用的所有Parent记录。 例如,假设我有: List item Parent Alice Parent Bob Child Charlie references Alice, B

  • 问题内容: 我有一个具有以下字段的MySQL表: 其中父字段表示上层ID。例如,水果id是1,橙色是水果之一,因此父对象是1。 但是我想做一个有效的MySQL查询来获取所有记录,格式为parent-> children-> parent-> children格式。我怎样才能做到这一点? 查询的结果记录应类似于: 问题答案: 您需要mysql不支持的递归联接。您唯一可以做的就是确定最大深度(由于p-

  • 问题内容: 我不知道如何选择查询递归。 如何使用SqlServer取得这样的结果 问题答案: 您需要使用递归公用表表达式。 在线上有很多有用的文章。 有用的链接 简单谈谈:SQL Server CTE基础 blog.sqlauthority:递归CTE 这是您的问题的解决方案:

  • 我把这张桌子填满了 当选择IDFolder=1的文件夹时,应该为返回此文件夹的所有子文件夹和子文件夹(2,3,4,5,6,7) 当我选择文件夹id=4==>(5,7,6)时

  • 问题内容: 我有一张桌子 我填写这个表 选择idFolder = 1的文件夹时,应返回该文件夹和子子文件夹的所有子文件夹(2,3,4,5,6,7) 当我选择文件夹ID = 4 ==>(5,7,6) 当我选择文件夹ID = 3 ==>(4,5,6,7) 一个查询该怎么做? 谢谢 问题答案: 这是工作中的一个 在此处查看SQL固件:http://sqlfiddle.com/#!2 / 02b78 /