Братята и сестрите на даден възел ще имат един и същ предшественик. Това обаче ще включва „1“, както и вашия списък:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
Във вашата таблица не съм сигурен какво означава за ancestor
да бъде същият като descendant
. Но мисля, че следното е заявката, която искате:
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;
РЕДАКТИРАНЕ:
Можете да направите това като явно присъединете се така:
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;
Забележка:Добавих и условието t.id <> 2
така че "2" не се счита за брат на себе си.