2016-11-08 123 views
0

我正在使用SQL Server。T-SQL按层次结构搜索

我有一个表群组具有两个整数列:

MEGR_KEY 
MEGR_KEY1 

MEGR_KEY是基团的主键。每个组都可以有子组。

例如 - I有一组1195:

MEGR_KEY = 1195

有1195个亚组:

MEGR_KEY = 9484  
MEGR_KEY1 = 1195 

MEGR_KEY = 7494 
MEGR_KEY1 = 1195 

基本上MEGR_KEY1告诉,哪一组是父母。

我的问题是,如何找到所有MEGR_KEY分层次,只给予根组名?假设(从前面的例子)有1195个根组。已经有两个子组:7494和9484.现在,这两个子组也可以是其他组的父组。因此,我必须找到MEGR_KEY1 = 7494或MEGR_KEY1 = 9484的行。如果给出组号(MEGR_KEY)时给出所有子组?我有一个问题在这里写这个查询。

+1

乘坐看看递归自连接 – rbr94

回答

2

对于您的情况,您的构建模式

CREATE TABLE #TAB (MEGR_KEY INT, NAME VARCHAR(50), MEGR_KEY1 INT) 

    INSERT INTO #TAB 
    SELECT 19 , 'Name1' , 0 
    UNION ALL 
    SELECT 20 ,'Name2' , 19 
    UNION ALL 
    SELECT 21 , 'Name3' , 20 
    UNION ALL 
    SELECT 22 , 'Name4' , 21 
    UNION ALL 
    SELECT 23 , 'Name5' , 21 
    UNION ALL 
    SELECT 26 , 'Name6' , 19 
    UNION ALL 
    SELECT 28 , 'Name7' , 0 
    UNION ALL 
    SELECT 29 , 'Name7' , 18 
    UNION ALL 
    SELECT 30 , 'Name8' , 18 

现在查询表(我花了CTE递归)

DECLARE @MEGR_KEY INT=19; 

    ;WITH CTE AS(
    SELECT * FROM #TAB WHERE MEGR_KEY= @MEGR_KEY 
    UNION ALL 
    SELECT T.* FROM #TAB T 
    INNER JOIN CTE C ON T.MEGR_KEY1 = C.MEGR_KEY 
    ) 
    SELECT * FROM CTE 

而其结果将是

enter image description here