Tsql 从树状结构返回父id

Tsql 从树状结构返回父id,tsql,sql-server-2012,recursive-query,Tsql,Sql Server 2012,Recursive Query,我正在尝试获取与父级相关的所有子级ID(多级)。我认为使用递归可以做到这一点,在尝试了查询之后,它没有返回预期的结果,我甚至不确定这是否是实现这一点的编写方式,也不确定我的错误在哪里 预期结果是返回指定位置的所有市和县 例如,如果我传递了英格兰的id(id=1),我想返回所有与之关联的id。它最多可以是4-5级关联 比如说 Id Location ----- --------------- 1 England 3 London (as its

我正在尝试获取与父级相关的所有子级ID(多级)。我认为使用递归可以做到这一点,在尝试了查询之后,它没有返回预期的结果,我甚至不确定这是否是实现这一点的编写方式,也不确定我的错误在哪里

预期结果是返回指定位置的所有市和县

例如,如果我传递了英格兰的id(id=1),我想返回所有与之关联的id。它最多可以是4-5级关联

比如说

Id      Location
-----  ---------------
1      England
3      London            (as its associated with England)         
5      Ealing            (as associated with London)
6      Westminster       (as associated with London)
7      Camden            (as associated with London)
8      Barnet            (as associated with London)
。 .

有人能告诉我如何解决这个问题吗。这是解决这个问题的正确方法吗


谢谢。

本教程很好地概述了如何在sql中存储层次结构数据


最初来自这个问题:

您正朝着正确的方向前进

考虑一下我取得的成果:

;WITH locationFamily AS
(
    SELECT   id
            ,location_name 
            ,parent_id
            ,0 as level
    FROM location
    WHERE parent_id IS NULL
    and id = 1
    UNION ALL 
    SELECT   ls.id
            ,ls.location_name 
            ,ls.parent_id
            ,level + 1
    FROM location   ls
    INNER JOIN locationFamily  lf ON ls.parent_id= lf.id
)
SELECT *
FROM locationFamily 
将id条件移动到CTE中的第一个选择,更改id连接的别名