Os irmãos de um determinado nó teriam o mesmo ancestral. No entanto, isso incluiria "1" e sua lista:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
Na sua tabela, não tenho certeza do que isso significa para
ancestor
para ser o mesmo que descendant
. Mas, acho que o seguinte é a consulta que você deseja: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:
Você pode fazer isso como um explícito junte-se assim:
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;
Observação:também adicionei a condição
t.id <> 2
então "2" não é considerado um irmão de si mesmo.