Đây là một giải pháp:
select p1.* from tree_path as p1
left outer join (tree_path as p2 join tree_path as p3 on p2.children = p3.parent)
on p2.parent = p1.parent
and p3.children = p1.children
and p2.parent <> p2.children
and p3.parent <> p3.children
where p1.parent = 3 and p2.parent is NULL;
+----------+--------+
| children | parent |
+----------+--------+
| 3 | 3 |
| 7 | 3 |
| 8 | 3 |
+----------+--------+
Thay đổi p1.parent =7 và bạn nhận được kết quả này:
+----------+--------+
| children | parent |
+----------+--------+
| 7 | 7 |
| 15 | 7 |
| 16 | 7 |
+----------+--------+
Đây là cách nó hoạt động:con cái ngay lập tức là con cháu trong đó có một đường dẫn từ cha mẹ đến con, nhưng không có đường dẫn từ cha mẹ qua một nút thứ ba đến con. Vì vậy, chúng tôi cố gắng tham gia vào một đường dẫn như vậy (p2-> p3) và nếu không tìm thấy, thì tất cả các cột của p2 và p3 sẽ là NULL.