Hier ist eine Lösung:
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 |
+----------+--------+
Ändern Sie p1.parent=7 und Sie erhalten diese Ausgabe:
+----------+--------+
| children | parent |
+----------+--------+
| 7 | 7 |
| 15 | 7 |
| 16 | 7 |
+----------+--------+
So funktioniert es:Unmittelbare Kinder sind Nachkommen, bei denen es einen Pfad vom Elternteil zum Kind gibt, aber keinen Pfad vom Elternteil über einen dritten Knoten zum Kind. Also versuchen wir, uns einem solchen Pfad anzuschließen (p2->p3) und wenn keiner gefunden wird, sind alle Spalten von p2 und p3 NULL.