PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Sử dụng CTE đệ quy với Ecto

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
)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL cách nối giá trị khoảng thời gian '2 ngày'

  2. Các chức năng của cửa sổ PostgreSQL Bỏ qua Giá trị Null

  3. PostgreSQL nơi tất cả trong mảng

  4. Lưu đầu ra PL / pgSQL từ PostgreSQL vào tệp CSV

  5. Postgres HStore Lỗi - Nhà điều hành không xác định