Die Geschwister eines bestimmten Knotens hätten denselben Vorfahren. Dies würde jedoch "1" sowie Ihre Liste enthalten:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
In Ihrer Tabelle bin ich mir nicht sicher, was es für ancestor
bedeutet dasselbe sein wie descendant
. Aber ich denke, die folgende Abfrage ist die gewünschte:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t2.id = 2) and
t.ancestor <> t.descendant and
t.id <> 2;
BEARBEITEN:
Sie können dies explizit tun treten Sie wie folgt bei:
select t.*
from table t join
table t2
on t.ancestor = t2.ancestor and
t2.id = 2 a
where t.id <> 2 and
t.ancestor <> t.descendant;
Hinweis:Ich habe auch die Bedingung t.id <> 2
hinzugefügt also wird "2" nicht als Geschwister von sich selbst betrachtet.