【问题标题】:T-Sql search by hierarchy [duplicate]按层次结构搜索 T-Sql [重复]
【发布时间】:2017-03-22 00:35:36
【问题描述】:

我正在使用 SQL Server。

我有一个包含两个整数列的 Groups 表:

MEGR_KEY
MEGR_KEY1

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

例如 - 我有一个 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),如何找到所有子组?我在这里编写查询时遇到问题。

【问题讨论】:

  • 看看递归自连接

标签: sql sql-server tsql


【解决方案1】:

根据您的情况,让我们构建架构

    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

结果会是

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2022-12-21
    • 2017-04-25
    • 2013-11-07
    • 1970-01-01
    相关资源
    最近更新 更多