/*--按父找子--*/
declare @a table (TC_Id int,TC_PID int,TC_Name varchar(200))
insert @a values(1,0,'中国')
insert @a values(2,0,'美国')
insert @a values(3,0,'加拿大')
insert @a values(4,1,'北京')
insert @a values(5,1,'上海')
insert @a values(6,1,'江苏')
insert @a values(7,6,'苏州')
insert @a values(8,7,'常熟')
insert @a values(9,6,'南京')
insert @a values(10,6,'无锡')
insert @a values(11,2,'纽约')
insert @a values(12,2,'旧金山')declare @tmp1 table (TC_Id int,TC_PID int,TC_Name varchar(200),lev int)
insert @tmp1 select *,1 from @a where tc_ID=1
while exists(select 1 from @a a,@tmp1 b where a.tc_pid=b.tc_ID and a.tc_ID not in (select tc_ID from @tmp1))
  insert @tmp1 select a.*,1 from  @a a,@tmp1 b where a.tc_pid=b.tc_ID and a.tc_ID not in (select tc_ID from @tmp1)
select * from @tmp1/*--按子找父--*/
--建立环境
declare @a table (TC_Id int,TC_PID int,TC_Name varchar(200))
insert @a values(1,0,'中国')
insert @a values(2,0,'美国')
insert @a values(3,0,'加拿大')
insert @a values(4,1,'北京')
insert @a values(5,1,'上海')
insert @a values(6,1,'江苏')
insert @a values(7,6,'苏州')
insert @a values(8,7,'常熟')
insert @a values(9,6,'南京')
insert @a values(10,6,'无锡')
insert @a values(11,2,'纽约')
insert @a values(12,2,'旧金山')declare @tmp1 table (TC_Id int,TC_PID int,TC_Name varchar(200))--开始结点
insert @tmp1 select * from @a where tc_ID=10--循环得到
while exists(select 1 from @a a,@tmp1 b where a.tc_id=b.tc_pID and a.tc_ID not in (select tc_ID from @tmp1))
  insert @tmp1 select a.* from  @a a,@tmp1 b where a.tc_id=b.tc_pID and a.tc_ID not in (select tc_ID from @tmp1)

解决方案 »

  1.   

    access?这样:create table 你的表 (TC_Id int,TC_PID int,TC_Name varchar(200))
    insert 你的表 values(1,0,'中国')
    insert 你的表 values(2,0,'美国')
    insert 你的表 values(3,0,'加拿大')
    insert 你的表 values(4,1,'北京')
    insert 你的表 values(5,1,'上海')
    insert 你的表 values(6,1,'江苏')
    insert 你的表 values(7,6,'苏州')
    insert 你的表 values(8,7,'常熟')
    insert 你的表 values(9,6,'南京')
    insert 你的表 values(10,6,'无锡')
    insert 你的表 values(11,2,'纽约')
    insert 你的表 values(12,2,'旧金山')create table 中间表 (TC_Id int,TC_PID int,TC_Name varchar(200),lev int)insert 中间表 select *,1 from 你的表 where tc_ID=1while exists(select 1 from 你的表 a,中间表 b where a.tc_pid=b.tc_ID and a.tc_ID not in (select tc_ID from 中间表))  insert 中间表 select a.*,1 from  你的表 a,中间表 b where a.tc_pid=b.tc_ID and a.tc_ID not in (select tc_ID from 中间表)select * from 中间表
    你看看是不是可以在access里写循环
      

  2.   

    Sql Server 对层次的支持不好,相反oracle却有很好的支持
      

  3.   

    一道 SQL 题 ... (关于树型结构的在关系表中的存储及其应用处理) 
    http://www.csdn.net/Develop/Read_Article.asp?Id=17247http://www.csdn.net/Develop/list_article.asp?author=playyuer