Los hermanos de un nodo dado tendrían el mismo ancestro. Sin embargo, esto incluiría "1" además de su lista:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
En su tabla, no estoy seguro de lo que significa para ancestor
ser igual a descendant
. Pero, creo que la siguiente es la consulta que desea:
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;
EDITAR:
Puede hacer esto como explícito únete así:
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;
Nota:también agregué la condición t.id <> 2
por lo que "2" no se considera un hermano de sí mismo.