a表    
id   parentid   name
1     null      总公司
2     1         南京公司
3     2        无锡分公司   
4     2        苏州分公司
5     4        昆山分公司
6     4       工业园区分公司 
7     1         广西公司
8     7         桂柳分公司
9     8         柳州分公司
10    8         桂林分公司
11    7          梧洲分公司
B 表
ID    JINE          
3      100,000
5      150,000
6      75,000
9      64,000
10     21,000
10     34,000
11     16,000
11     23,000只有A表中的树页(也就是再没有下节点的公司才会在B中有记录).但是要求在B中按照每个公司进行查询.例如选择梧洲就出现他本身的.选择桂柳分公司就出现桂林和柳州的所有记录,选择广西就出现桂林,柳州,梧洲的所有记录.选择总公司就要查询到所有的记录.

解决方案 »

  1.   


    SELECT JINE FROM B WHERE b.id IN
    (
    SELECT a.id FROM a WHERE parentid IN (SELECT id FROM a WHERE name='昆山分公司')
    )
    --name=@name
      

  2.   

    得到选择的节点的ID,在表中用parentid来查询!!
      

  3.   

    这种递归结构的不是很好查询,可能改下字段parentid结构和内容更好查询点:
    a表    
    id  parentid  name 
    1    0        总公司 
    2    10       南京公司 
    3    1010     无锡分公司  
    4    1011     苏州分公司 
    5    101110   昆山分公司 
    6    101111   工业园区分公司
    7    11       广西公司 
    8    1110     桂柳分公司 
    9    111010   柳州分公司 
    10   111011   桂林分公司 
    11   111012   梧洲分公司查询总公司:
    select * form b
    查询南京公司 
    select * from b where left(id,2)='10'
    查询苏州分公司
    select * from b where left(id,4)='1011'
    查询昆山分公司 
    select * from b where id='101110'