SQL Server:如何选择第二高的parentid?

时间:2010-01-13 23:54:06

标签: sql sql-server parent-child

我有一个包含这些页面的SQL Server数据库:

+------------+--------------+-------------------------------+  
|  pageid    |  parentid    |  title                        |
+------------+--------------+-------------------------------+  
|  1         |  null        |  Home                         |
+------------+--------------+-------------------------------+  
|  2         |  1           |  News                         |
+------------+--------------+-------------------------------+  
|  3         |  1           |  User                         |
+------------+--------------+-------------------------------+  
|  4         |  3           |  Edit profile                 |
+------------+--------------+-------------------------------+  
|  5         |  3           |  Messages                     |
+------------+--------------+-------------------------------+  
|  6         |  5           |  View all                     |
+------------+--------------+-------------------------------+  

如何为任何行选择第二高(水平)parentid?因此,对于pageid = 6(查看全部),它应该返回parentid-> 3(用户)。

2 个答案:

答案 0 :(得分:2)

对于父层次结构的固定且已知步数,请使用显式连接:

select l2.*
from table t
join table l1 on t.parent_id = l1.pageid
join table l2 on l1.parent_id = l2.pageid
where t.pageid = 6;

对于层次结构中未知数量的步骤,请使用递归cte,但需要停止条件,请参阅Recursive Queries Using Common Table Expressions

答案 1 :(得分:0)

尝试:

select max(thing) from table where thing < (select max(thing) from table)

我无法从您的问题和您的样本中选择您是否需要pageid或parentid。