Làm cách nào để sử dụng kết quả của CTE đệ quy trong truy vấn mà tôi định chạy với Ecto? Ví dụ chúng ta hãy nói rằng tôi có một bảng, nút, cấu trúc như vậy:Sử dụng CTE đệ quy với Ecto
-- nodes table example --
id parent_id
1 NULL
2 1
3 1
4 1
5 2
6 2
7 3
8 5
và tôi cũng có một nodes_users bảng cấu trúc như vậy:
-- nodes_users table example --
node_id user_id
1 1
2 2
3 3
5 4
Bây giờ, tôi muốn lấy tất cả những người sử dụng với một nút tại hoặc cao hơn một nút cụ thể, vì lợi ích của một ví dụ chúng ta hãy chọn nút w/id 8.
tôi có thể sử dụng đệ quy postgresql truy vấn sau đây để làm như vậy:
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
này sẽ trả về người sử dụng. * Cho người sử dụng w/id của 1, 2, và 4.
Tôi không chắc chắn làm thế nào tôi có thể chạy truy vấn này cùng sử dụng ecto, lý tưởng một cách mà sẽ quay trở lại một đầu ra có thể thay đổi được. Tôi hiểu rằng tôi có thể chèn SQL thô vào truy vấn của mình bằng cách sử dụng macro phân đoạn, nhưng tôi không chắc chắn nơi nó sẽ đi cho việc sử dụng này hoặc nếu đó sẽ là tuyến đường thích hợp nhất để thực hiện.
Trợ giúp và/hoặc đề xuất sẽ được đánh giá cao!