Các anh chị em của một nút nhất định sẽ có cùng một tổ tiên. Tuy nhiên, điều này sẽ bao gồm "1" cũng như danh sách của bạn:
select t.*
from table t
where t.ancestor = (select ancestor from table t2 where t.id = 2);
Trong bảng của bạn, tôi không chắc nó có ý nghĩa gì đối với ancestor
giống với descendant
. Nhưng, tôi nghĩ sau đây là truy vấn bạn muốn:
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;
CHỈNH SỬA:
Bạn có thể làm điều này với tư cách là rõ ràng tham gia như thế này:
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;
Lưu ý:Tôi cũng đã thêm điều kiện t.id <> 2
vì vậy "2" không được coi là anh chị em của chính nó.