Rodzeństwo danego węzła miałoby tego samego przodka. Będzie to jednak zawierało „1” oraz listę:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
W Twojej tabeli nie jestem pewien, co to oznacza dla ancestor
być takim samym jak descendant
. Ale myślę, że następujące jest zapytanie, którego szukasz:
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;
EDYCJA:
Możesz to zrobić jasno dołącz w ten sposób:
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;
Uwaga:dodałem również warunek t.id <> 2
więc "2" nie jest uważane za własne rodzeństwo.