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