2010-01-13 50 views
0

我有這些頁面的SQL Server數據庫: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(用戶)。

+1

這個問題有一個令人誤解的標題。也許它應該是「尋找父母的父母」,或者其他什麼 – 2010-01-14 00:20:01

回答

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

+0

哎呀,我想這正是我需要的。然而,我不明白這是如何工作的...還有,我正在使用sql server的快速版本。可能會有更簡單的解決方案嗎? – Ropstah 2010-01-14 01:08:24

0

嘗試:

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

是否要的pageid或parentId的我無法從你的問題,你的樣品挑選。

+0

一個很好的答案,但是對於一個不同的問題。 這篇文章涉及到一個樹層次結構,問題是如何找到一個節點父層的父節點。 – 2010-01-14 00:18:59