我的表结构是这样的:
create table tbsort
(
  st_Id bigint not null auto_increment,//自增ID
  st_ParentId bigint default null,//父类别ID(从自增ID中取)
  st_Name varchar(20) default null,//名称
  st_Re varchar(200),//备注
  PRIMARY KEY(st_Id)
);
+-------+-------------+---------------+-----------+
| st_Id | st_ParentId | st_Name       | st_Re |
+-------+-------------+---------------+-----------+
|     1 |        NULL | java          | NULL      |
|     2 |        NULL | .net          | NULL      |
|     3 |        NULL | oracle        | NULL      |
|     4 |        NULL | ruby          | NULL      |
|     5 |           1 | struts        | NULL      |
|     6 |           1 | Hibernate     | NULL      |
|     7 |           1 | Spring        | NULL      |
|     8 |           5 | Action        | NULL      |
|     9 |           8 | DispathAction | NULL      |
|    10 |           2 | asp.net       | NULL      |
+-------+-------------+---------------+-----------+
这是数据.如果我想要查询出st_Id=1下的所有的子类别(包括子类别的子类别),
这个查询要怎么写?

解决方案 »

  1.   

    重新设计一列叫code  它的规则是1是父类,1001,1002,1003第二级,1001001,1001002第三级查询的时候用like就可以了,你这种当然不好查询。
      

  2.   

    试试这个吧Oracle用这个  Select t1.st_Id,t1.st_ParentId,t1.st_Name,t1.st_Re   from tbsort t1,tbsort t2  where  t1.st_Id=t2.st_ParentId (+)SQL Server用这个  Select t1.st_Id,t1.st_ParentId,t1.st_Name,t1.st_Re   from tbsort t1 left join tbsort t2  on  t1.st_Id=t2.st_ParentId
      

  3.   

    感觉与树形结构的要求差不多,如果你的是sqlserver 2005,或者oracle 可以用一条搞定,如果不是的话,可能需要存储过程,你查下,oracle 树形,应该有一堆的
      

  4.   

    那就再加一字段,该字段关联st_Id.
    说明与st_Id关联的所有数据
      

  5.   

      Select t1.st_Id,t1.st_ParentId,t1.st_Name,t1.st_Re   from tbsort t1 left join tbsort t2  on  t1.st_Id=t2.st_ParentId and t1.st_Id=1
      

  6.   

    哦,我那个在3楼的答案忘了加 t1.st_Id=1这个条件了
      

  7.   

    Select  st_Id, st_ParentId, st_Name, st_Re 
    from tbsort where  st_ParentId=1 or(st_ParentId in (select st_Id from tbsort where st_ParentId=1))