Sourozenci daného uzlu by měli stejného předka. To by však zahrnovalo „1“ i váš seznam:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
Ve vaší tabulce si nejsem jistý, co znamená ancestor
být stejný jako descendant
. Ale myslím, že následující dotaz je ten, který chcete:
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:
Můžete to udělat explicitně připojte se takto:
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;
Poznámka:Přidal jsem také podmínku t.id <> 2
takže "2" není považováno za sourozence.