Tôi đã có thể thực hiện điều này bằng cách sử dụng một mảnh. Đây là một ví dụ về mã tôi đã sử dụng. Tôi có thể sẽ chuyển phương thức này sang một thủ tục được lưu trữ.
Repo.all(MyProj.User,
from u in MyProj.User,
join: un in MyProj.UserNode, on: u.id == un.user_id,
join: nt in fragment("""
(
WITH RECURSIVE node_tree AS (
SELECT *
FROM nodes
WHERE nodes.id = ?
UNION ALL
SELECT n.*
FROM nodes n
INNER JOIN node_tree nt ON nt.parent_id == n.id
)
) SELECT * FROM node_tree
""", ^node_id), on: un.node_id == nt.id
)