zoukankan      html  css  js  c++  java
  • SQLSERVER 递归查询

    CREATE TABLE #temp_knowledge
        (
          knowledge_name NVARCHAR(MAX) ,
          knowledge_id INT ,
          p_knowledge_id INT
        );
        
        
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点1' , -- knowledge_name - nvarchar(max)
              1 , -- knowledge_id - int
              0  -- p_knowledge_id - int
            );
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点1.1' , -- knowledge_name - nvarchar(max)
              2 , -- knowledge_id - int
              1  -- p_knowledge_id - int
            );
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点1.2' , -- knowledge_name - nvarchar(max)
              3 , -- knowledge_id - int
              1  -- p_knowledge_id - int
            );
        
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点1.3' , -- knowledge_name - nvarchar(max)
              4 , -- knowledge_id - int
              1  -- p_knowledge_id - int
            );
        
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点1.1.1' , -- knowledge_name - nvarchar(max)
              5 , -- knowledge_id - int
              2  -- p_knowledge_id - int
            );
        
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点1.1.2' , -- knowledge_name - nvarchar(max)
              6 , -- knowledge_id - int
              2  -- p_knowledge_id - int
            );
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点2' , -- knowledge_name - nvarchar(max)
              7 , -- knowledge_id - int
              0  -- p_knowledge_id - int
            );
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点2.1' , -- knowledge_name - nvarchar(max)
              8 , -- knowledge_id - int
              7  -- p_knowledge_id - int
            );
            
    INSERT  INTO #temp_knowledge
            ( knowledge_name ,
              knowledge_id ,
              p_knowledge_id
            )
    VALUES  ( N'知识点2.2' , -- knowledge_name - nvarchar(max)
              9 , -- knowledge_id - int
              7  -- p_knowledge_id - int
            );
            
          
    --查询该知识点id下的所以集合
    DECLARE @knowledge_id INT = 1;   
    
    WITH    data
              AS ( SELECT   *
                   FROM     #temp_knowledge tk
                   WHERE    knowledge_id = @knowledge_id
                   UNION ALL
                   SELECT   tk.*
                   FROM     #temp_knowledge tk
                            INNER JOIN data d ON tk.p_knowledge_id = d.knowledge_id
                 )
        SELECT  *
        FROM    data;
    
    DROP TABLE #temp_knowledge;

    所有知识点集合:

    SELECT * FROM #temp_knowledge

     递归查询知识点id等于1下的所有子集:

    --查询该知识点id下的所以集合
    DECLARE @knowledge_id INT = 1;   
    
    WITH    data
              AS ( SELECT   *
                   FROM     #temp_knowledge tk
                   WHERE    knowledge_id = @knowledge_id
                   UNION ALL
                   SELECT   tk.*
                   FROM     #temp_knowledge tk
                            INNER JOIN data d ON tk.p_knowledge_id = d.knowledge_id
                 )
        SELECT  *
        FROM    data;

  • 相关阅读:
    Educational Codeforces Round 13 E. Another Sith Tournament 概率dp+状压
    Codeforces Round #358 (Div. 2) D. Alyona and Strings 字符串dp
    Codeforces Round #359 (Div. 2) D. Kay and Snowflake 树的重心
    Codeforces Round #311 (Div. 2) D. Vitaly and Cycle 奇环
    Codeforces Round #Pi (Div. 2) E. President and Roads 最短路+桥
    Codeforces Gym 100342J Problem J. Triatrip 三元环
    HDU 4587 TWO NODES 割点
    hdu 5615 Jam's math problem(十字相乘判定)
    C++数组作为函数参数的几个问题(转)
    UVA
  • 原文地址:https://www.cnblogs.com/YoungHeart/p/15156614.html
Copyright © 2011-2022 走看看