有两个表A和B,两个表是通过id来对应的,
A表以下记录:
id  name
1    a
2    bB表有以下记录:
id  name
1    b
2    c现在知道c,请问怎么查出对应的a? 也就是a,b,c是有上下关系三级,现在知道c要查出它的上上级a,有些有五六级的,只知道其中一个级的值,但又不知道这个值是第几级的,请问怎么查?

解决方案 »

  1.   

    select A.a from A,B where A.id=B.id and B.name='c'
      

  2.   

    如果是无限级分类,你表建错了,只要一个表就可以了id   name   pid
      

  3.   

    同意楼上的说法,如果你的级很多,按你所建的表来说,这个操作会很复杂给你一个简单的表结构:
    ID       name    Grade
    01        A       0
    0101      B       1
    0102      B1      1
    010101    C       2这样做的好处是,如果你想做成树形的结构很容易(可以根据ID排,可以根据Grade来获取自己的级数);如果这样做很方便你查找某个name的父级及更上一级
    如果你要看到C顶级名,可以这样写
    select * from 表 where id=left((select ID from 表 where name='c'),2)
      

  4.   

    DECLARE @a TABLE(ID INT,Name VARCHAR(10))
    INSERT @a SELECT 1,'a'
    UNION ALL SELECT 2,'b'
    UNION ALL SELECT 3,'c'
    UNION ALL SELECT 4,'x'DECLARE @b TABLE(ID INT,Name VARCHAR(10))
    INSERT @b SELECT 1,'b'
    UNION ALL SELECT 2,'c'
    UNION ALL SELECT 4,'a'
    SELECT b.Name sName,a.Name fName 
    INTO #t 
    FROM @a a
    LEFT JOIN @b b 
    ON a.id=b.id
    --这里可以不用临时表,为了写查询方便所以用了临时表DECLARE @f VARCHAR(10)
    SET @f='b' --你要查的任一Name
    WHILE EXISTS (SELECT 1 FROM #t WHERE sName=@f)
    SELECT @f=fName FROM #t WHERE sName=@f

    SELECT @f --得出你要查的Name对应的根级Name,如果要查出原来表中对应的ID,那么 SELECT * FROM @a WHERE Name=@f
    DROP TABLE #t