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

sql在一个字段中选择父级子级递归

仲孙疏珂
2023-03-14
问题内容

我不知道如何选择查询递归。

 id     idparent    jobNO
--------------------------------
  1         0         1
  2         1         2
  3         1         3
  4         0         4
  5         4         5
  6         4         6

如何使用SqlServer取得这样的结果

 id     idparent    jobNO   ListJob
----------------------------------------
  1         0         1        1
  2         1         2        1/2
  3         1         3        1/3
  4         0         4        4
  5         4         5        4/5
  6         5         6        4/5/6

问题答案:

您需要使用递归公用表表达式。

在线上有很多有用的文章。

有用的链接

简单谈谈:SQL Server CTE基础

blog.sqlauthority:递归CTE

这是您的问题的解决方案:

   CREATE TABLE #TEST
    (
        id int not null,
        idparent int not null,
        jobno int not null
    );

    INSERT INTO #Test VALUES 
    (1,0,1),
    (2,1,2),
    (3,1,3),
    (4,0,4),
    (5,4,5),
    (6,5,6);

    WITH CTE AS (
-- This is end of the recursion: Select items with no parent
        SELECT id, idparent, jobno, CONVERT(VARCHAR(MAX),jobno) AS ListJob
        FROM #Test
        WHERE idParent = 0
    UNION ALL
-- This is the recursive part: It joins to CTE
        SELECT t.id, t.idparent, t.jobno,  c.ListJob + '/' + CONVERT(VARCHAR(MAX),t.jobno) AS ListJob
        FROM #Test t
        INNER JOIN CTE c ON t.idParent = c.id
    )
    SELECT * FROM CTE
    ORDER BY id;


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

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

  • 问题内容: SQL开发人员,我有一个计划不周的数据库作为任务,以学习有关SQL Server 2012的很多知识。 所以,有表: 更新该行后,我需要检查element的父键,以不允许element自anny之类。 当我删除该行时,我需要删除所有孩子以及孩子的孩子,等等。 问题是: 如何选择DIST的一个元素的所有“父母+祖父母+等等”? 我如何选择DIST元素中的所有“儿子+孙子+等”? 我读过有

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

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

  • 我有一个父子关系,我想在我的数据库中确保每一个父母只链接到一个孩子。下面是我所拥有的一个例子 我想通过验证孩子的PK,确保每个家长只有一个孩子,但我不知道如何做,或者这是否可能