Les frères et sœurs d'un nœud donné auraient le même ancêtre. Cependant, cela inclurait "1" ainsi que votre liste :
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
Dans votre tableau, je ne suis pas sûr de ce que cela signifie pour ancestor
être le même que descendant
. Mais, je pense que la requête suivante est la requête que vous souhaitez :
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;
MODIFIER :
Vous pouvez le faire en tant que explicite rejoindre comme ceci :
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;
Remarque :j'ai également ajouté la condition t.id <> 2
donc "2" n'est pas considéré comme un frère de lui-même.