Syskonen till en given nod skulle ha samma förfader. Detta skulle dock inkludera "1" såväl som din lista:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
I din tabell är jag inte säker på vad det betyder för ancestor
att vara samma som descendant
. Men jag tror att följande är frågan du vill ha:
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öra detta som en explicit gå med så här:
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;
Obs:Jag har också lagt till villkoret t.id <> 2
så "2" anses inte vara ett syskon till sig själv.