aus performance technischer sicht, scheint eine reine sql lösung, welche die rekursion abfackelt, das beste.
rekursion innerhalb von datenbanken ist möglich. das läuft zwar auch auf ein abarbeiten des baumes aus, bleibt aber innerhalb der db-engine.
dies setzt aber die möglichkeiten für die jeweilige db-engine voraus (z.b. stored proceedure, welche sich selbst aufruft oder schleife in einer geschachtelten).
du kannst aber auch im programm außerhalb der db-engine den baum durchlaufen und einzelne selects an den db-server geben. hierfür müssen alle 3 tabellen per inner join verbunden werden.
allerdings kann die datenmenge auch einen einfluß haben. ich würde daher beide varianten mit sinnvollen datenmengen vergleichen.