ich einen binären Baum in einer SQL Server vorgestellt haben 2.014 Tabelle:Binary Suchabfrage mit Hilfe von SQL
UserID ParentUserID Position
----------------------------
1 Null Null <-- ROOT
2 1 Left
3 1 Right <-- Last Right for ID=1 (CTE query return 3)
4 2 Left
5 4 Left
6 5 Left
7 6 Left <-- Last Left for ID=1 (CTE query return 6)
Um letzte linke ID und letzte richtige ID bekomme ich bin mit CTE-Abfrage:
; with left_hand_recurse as
(
select UserID
, ParentUserID
, 1 as depth
from Table1 where ParentUserID is null
union all
select child.UserID
, child.ParentUserID
, parent.depth + 1
from left_hand_recurse parent
join Table1 child
on parent.UserID = child.ParentUserID
and position = 'Left'
)
select top 1 *
from left_hand_recurse
order by
depth desc
;
und
; with right_hand_recurse as
(
select UserID
, ParentUserID
, 1 as depth
from Table1 where ParentUserID is null
union all
select child.UserID
, child.ParentUserID
, parent.depth + 1
from right_hand_recurse parent
join Table1 child
on parent.UserID = child.ParentUserID
and position = 'Right'
)
select top 1 *
from right_hand_recurse
order by
depth desc
;
Es funktioniert gut. Auf diese Weise kann ich die letzten UserID
in der linken oder rechten Seite für root bekommen (für ParentUserID == 1
)
Ich brauche die CTE-Abfrage zu modifizieren gleiches Ergebnis zu erhalten, aber für bestimmte ParentUserID
, die ich als Parameter @ParentUserID
geben will.
Wie wird dieses Ziel erreicht?
würde es weiter erklären, warum die eher als die ursprüngliche Version funktioniert? –
Ich habe versucht, nicht richtig funktioniert. Wenn ich in der Tabelle keinen Wert "Right" habe, gibt die Abfrage mich LastRight für diese Position zurück. –