类别表                                                    项目表
        typeid       parentid        typename                       id            typeid       name
          1             0             顶级分类                       1               1         ...  
          2             1             二级分类                       2               1         ...  
          3             2             三级分类                       3               2         ...  
          4             3             四级分类                       4               2         ...  
                                                                     5               3         ...  
                                                                     6               4         ...  
         可以无限极分类.........
     类别表可以无限分类,然后通过某一个分类的typeid 在项目表里查询(跟项目表里typeid关联)当前分类包括所有子类别 (子类别的子类别....类似递归了  但是查询的是项目表里的数据) 的数据?   各位大神门帮帮忙  
                                                                             

解决方案 »

  1.   

    用CTE递归,洗澡去,回来没人回复我再帮你写
      

  2.   


    怎么写?  这个帖子发布后怎么变这样,重新说明下问题            类别表 
      typeid  parentid  typename 
        1       0       顶级分类   
        2       1       二级分类   
        3       2       三级分类   
        4       3       四级分类    
      可以无限极分类.........
         项目表
     projectid   typeid     name
       1           1       顶级分类
       2           2       二级分类 
       3           2      二级分类
       4           3       三级分类   
       5           3      三级分类  类别表可以无限分类,然后通过某一个分类的typeid 在项目表里查询(跟项目表里typeid关联)当前分类包括所有子类别  (子类别的子类别....类似递归了 但是查询的是项目表里的数据) 的数据? 各位大神门帮帮忙   
      

  3.   

    WITH TESTtype (typeid,parentid)
    AS(    SELECT typeid,parentid    
    FROM 类别表 AS a 
    where typeid=@typeid --起始节点    
    UNION ALL    
    SELECT typeid,parentid    
    FROM 类别表 AS a    INNER JOIN TEST AS b       
    ON a.parentid = b.typeid)

    select * from 项目表 where typeid IN (SELECT typeid FROM TESTtype)
      

  4.   

    WITH TESTtype (typeid,parentid)
    AS( SELECT typeid,parentid   
    FROM 类别表 AS a  
    where typeid=@typeid --起始节点   --@typeid 为楼主所查类别
    UNION ALL   
    SELECT a.typeid,a.parentid   
    FROM 类别表 AS a INNER JOIN TESTtype AS b   
    ON a.parentid = b.typeid)select * from 项目表 where typeid IN (SELECT typeid FROM TESTtype)
      

  5.   

    /*CREATE TABLE test (typeid INT , parentid INT , typename VARCHAR(10) )
     INSERT INTO test 
       SELECT 1, 0, '顶级分类'  
       UNION ALL  
       SELECT 2, 1 ,'二级分类'   
       UNION ALL 
       SELECT 3, 2, '三级分类'   
       UNION ALL 
       SELECT 4, 3, '四级分类'  
       
       
      create table  项目表 (projectid int , typeid int, name varchar(10))
      insert into 项目表
       select 1, 1 ,'顶级分类'
       union all 
       select 2, 2, '二级分类'  
       union all 
       select 3, 2, '二级分类'
       union all 
       select 4, 3 ,'三级分类'   
       union all 
       select 5 ,3 ,'三级分类'
       */
       DECLARE @a INT =2
       ;WITH cte 
       AS (
      --SELECT * FROM test 
       SELECT typeid, parentid ,typename 
       FROM test
       WHERE typeid=@a
       UNION ALL 
       SELECT b.typeid,b.parentid,b.typename
       FROM cte a INNER JOIN test b ON b.parentid=a.typeid 
       )
       SELECT * 
       FROM cte a LEFT JOIN 项目表 b ON a.typeid=b.typeid
     /*
     typeid      parentid    typename   projectid   typeid      name
     ----------- ----------- ---------- ----------- ----------- ----------
     2           1           二级分类       2           2           二级分类
     2           1           二级分类       3           2           二级分类
     3           2           三级分类       4           3           三级分类
     3           2           三级分类       5           3           三级分类
     4           3           四级分类       NULL        NULL        NULL
     
     (5 行受影响)
     
     */