Mit rekursivem CTE mit Ecto

Wie verwende ich das Ergebnis eines rekursiven CTE in einer Abfrage, die ich mit Ecto ausführen möchte? Nehmen wir zum Beispiel an, ich habe eine Tabelle, Knoten, die so strukturiert ist:

-- nodes table example --

id  parent_id
1   NULL
2   1
3   1
4   1
5   2
6   2
7   3
8   5

und ich habe auch eine andere Tabelle node_users, die so aufgebaut ist:

-- nodes_users table example --

node_id   user_id
1         1
2         2
3         3
5         4

Nun möchte ich alle Benutzer mit einem Knoten an oder über einem bestimmten Knoten erfassen. Als Beispiel wählen wir den Knoten mit der ID 8.

Ich könnte das folgende rekursive @ verwend postgresql Abfrage dazu:

WITH RECURSIVE nodes_tree AS (
    SELECT *
    FROM nodes
    WHERE nodes.id = 8
UNION ALL
    SELECT n.*
    FROM nodes n
    INNER JOIN nodes_tree nt ON nt.parent_id = n.id
)
SELECT u.* FROM users u
INNER JOIN users_nodes un ON un.user_id = u.id
INNER JOIN nodes_tree nt ON nt.id = un.node_id

Dies sollte Benutzer zurückgeben. * Für die Benutzer mit der ID 1, 2 und 4.

Ich bin mir nicht sicher, wie ich dieselbe Abfrage mit ecto ausführen könnte, idealerweise so, dass eine verkettbare Ausgabe zurückgegeben wird. Ich verstehe, dass ich mithilfe des Fragment-Makros unformatiertes SQL in meine Abfrage einfügen kann, bin mir jedoch nicht sicher, wohin dies für diese Verwendung führen würde oder ob dies der am besten geeignete Weg wäre.

Hilfe und / oder Vorschläge wäre dankbar!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage