我有一个包含这些页面的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(用户)。
答案 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。