在递归SQL中为父母和孩子指定一个细分

雷克萨斯FTW

给定一个ID的开头,中间或结尾,我想查找它们之间链接的所有行。

有了这个,我递归地发现了子元素

declare @T table(
  Id int primary key,
  Name nvarchar(255) not null,
  ParentId int)

insert into @T values
(1,   'A',    NULL),
(2,   'B',    1),
(3,   'C',    2),
(4,   'D',    NULL),
(5,   'E',    1)

declare @Id int = 2

;with cte as
(  
  select T.*
  from @T as T
  where T.Id = @Id
  union all
  select T.*
  from @T as T
    inner join cte as C
      on T.ParentId = C.Id
)
select *
from cte 

如果@Id等于2,我将得到2和3。但是我也想检索父级,在这种情况下为1。

我想得到这个:

如果id = 1

1 A NULL
2 B 1
3 C 2
5 E 1

如果id = 2

1 A NULL
2 B 1
3 C 2
5 E 1

如果id = 3

1 A NULL
2 B 1
3 C 2
5 E 1

如果id = 4

4 D NULL

如果id = 5

1 A NULL
2 B 1
3 C 2
5 E 1

我怎样才能解决这个问题?

in

好的!我有你:

我创建了一个单独的家庭进行测试。

您需要做的第一件事是创建一个查询,以查找所选ID的最老祖先。这是下面的第一个CTE。然后您指定该名称,我称它为@EveEve,是Eve的所有子代。

这是您可以尝试的示例

  create table UserType (
  Id int,
   name nvarchar(255),
  parentid int)

insert into UserType values
(1,  'A',    NULL),
(2,  'B',  1),
(3,  'C',   2),
(4,  'D',    NULL),
(5,  'E',   1),
(6,  'F',   NULL),
(7,  'G',      6),
(8,  'H',     7);

DECLARE @eve BIGINT;  --ancestor
DECLARE @id BIGINT;
SET @id = 8;  --This is where you choose

WITH tblParent AS  --CTE for oldest ancestor
(
    SELECT *
        FROM UserType WHERE Id = @id
    UNION ALL
    SELECT UserType.*
        FROM UserType  JOIN tblParent  ON UserType.Id = tblParent.ParentId
)
select
@eve = (select top 1 id from tblParent order by id);

WITH tblChild AS  --CTE for all @eve and all children
(
    SELECT *
        FROM UserType WHERE id = @eve
    UNION ALL
    SELECT UserType.* FROM UserType  JOIN tblChild  ON UserType.ParentId = tblChild.Id
)
SELECT * FROM tblChild
order by id


OPTION(MAXRECURSION 32767)

对CodeProject的支持非常有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“指定的孩子已经有一个父母”如何从AlertDialog中删除视图

来自分类Dev

为现有父母保存一个孩子

来自分类Dev

选择一个父母和所有给定父母或孩子ID的孩子

来自分类Dev

选择一个父母和所有给定父母或孩子ID的孩子

来自分类Dev

Android | 指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

来自分类Dev

指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。(C#)

来自分类Dev

指定的孩子已经有一个父母。您必须先对孩子的父母调用removeView()

来自分类Dev

指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()”

来自分类Dev

指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

来自分类Dev

指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。(C#)

来自分类Dev

Android | 指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

来自分类Dev

父母和第一个/最后一个孩子的边际崩溃如何工作?

来自分类Dev

将一个孩子的改变传达给父母的父母

来自分类Dev

由父母的另一个孩子生孩子

来自分类Dev

在JQuery中获得祖父母的第一个孩子的最优雅,可靠和高效的方法是什么?

来自分类Dev

自定义对话框-指定的孩子已经有一个父母

来自分类Dev

Logcat说:“指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。” 在我的第二个警报对话框中

来自分类Dev

Logcat说:“指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。” 在我的第二个警报对话框中

来自分类Dev

我如何通过使用oracle connect by before获得孩子和一个上级父母的信息?

来自分类Dev

休眠两个父母一个孩子映射

来自分类Dev

PostgreSQL。如何在递归查询中为所有孩子保存第一个 id?

来自分类Dev

与父母一起举一个孩子的例子

来自分类Dev

如何在一个查询中让所有孩子成为父母

来自分类Dev

我无法访问已添加到另一个孩子(它的父母)中的孩子

来自分类Dev

干CSS-多个父母一个孩子

来自分类Dev

打开一个孩子的div点击父母的

来自分类Dev

祖父母的第一个孩子

来自分类Dev

管道同一个父母的多个孩子

来自分类Dev

用jQuery获取每个父母的最后一个孩子

Related 相关文章

  1. 1

    “指定的孩子已经有一个父母”如何从AlertDialog中删除视图

  2. 2

    为现有父母保存一个孩子

  3. 3

    选择一个父母和所有给定父母或孩子ID的孩子

  4. 4

    选择一个父母和所有给定父母或孩子ID的孩子

  5. 5

    Android | 指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

  6. 6

    指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。(C#)

  7. 7

    指定的孩子已经有一个父母。您必须先对孩子的父母调用removeView()

  8. 8

    指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()”

  9. 9

    指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

  10. 10

    指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。(C#)

  11. 11

    Android | 指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

  12. 12

    父母和第一个/最后一个孩子的边际崩溃如何工作?

  13. 13

    将一个孩子的改变传达给父母的父母

  14. 14

    由父母的另一个孩子生孩子

  15. 15

    在JQuery中获得祖父母的第一个孩子的最优雅,可靠和高效的方法是什么?

  16. 16

    自定义对话框-指定的孩子已经有一个父母

  17. 17

    Logcat说:“指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。” 在我的第二个警报对话框中

  18. 18

    Logcat说:“指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。” 在我的第二个警报对话框中

  19. 19

    我如何通过使用oracle connect by before获得孩子和一个上级父母的信息?

  20. 20

    休眠两个父母一个孩子映射

  21. 21

    PostgreSQL。如何在递归查询中为所有孩子保存第一个 id?

  22. 22

    与父母一起举一个孩子的例子

  23. 23

    如何在一个查询中让所有孩子成为父母

  24. 24

    我无法访问已添加到另一个孩子(它的父母)中的孩子

  25. 25

    干CSS-多个父母一个孩子

  26. 26

    打开一个孩子的div点击父母的

  27. 27

    祖父母的第一个孩子

  28. 28

    管道同一个父母的多个孩子

  29. 29

    用jQuery获取每个父母的最后一个孩子

热门标签

归档