Søskende til en given node ville have samme forfader. Dette vil dog inkludere "1" såvel som din liste:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
I din tabel er jeg ikke sikker på, hvad det betyder for ancestor
at være det samme som descendant
. Men jeg tror, at følgende er den forespørgsel, du ønsker:
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;
EDIT:
Du kan gøre dette som en eksplicit deltag sådan her:
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;
Bemærk:Jeg tilføjede også betingelsen t.id <> 2
så "2" betragtes ikke som en søskende i sig selv.