表结构:序号 字段名 字段代码 类型 长度 默认值 是否为空 说明
1 编号 typeid number N P
2 分类名称 typename varchar2 50
3 产品数量 product number 0
4 上级分类 uptype number 0
如果一条记录的上级分类字段为某一个类别的编号,那么这条记录的上级分类就是该编号对应的类别现在我想通过SQL语句来查询所有上级分类的子类别,要求查出来的记录包括上级类别与之相应的子类别
请问应该怎么写?

解决方案 »

  1.   

    用上CONNECT BY PRIOR就可以了.
    Level可以知道等级。
      

  2.   

    select * from your_table
     start with typeid =1 //这个是以你最顶级为1来算的,自己按需要改
     connect by prior typeid = uptype 
      

  3.   

    FYI:http://blog.csdn.net/mantisXF/archive/2007/07/18/1697248.aspx
      

  4.   

    如果我想用hibernate表现这种关系,应该怎么做?
      

  5.   

    请参考以下代码
    Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
    创建示例表:
    CREATE TABLE TBL_TEST
    (
      ID    NUMBER,
      NAME  VARCHAR2(100 BYTE),
      PID   NUMBER                                  DEFAULT 0
    );
     
    插入测试数据:INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''1'''',''''10'''',''''0'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''2'''',''''11'''',''''1'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''3'''',''''20'''',''''0'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''4'''',''''12'''',''''1'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''5'''',''''121'''',''''2'''');
     
    从Root往树末梢递归
    select * from TBL_TEST
     start with id=1
     connect by prior id = pid
     
    从末梢往树ROOT递归
    select * from TBL_TEST
     start with id=5
     connect by prior pid = id