sql >> Databasteknik >  >> RDS >> PostgreSQL

Använder rekursiv CTE med Ecto

Jag kunde åstadkomma detta med ett fragment. Här är ett exempel på koden jag använde. Jag kommer förmodligen att flytta den här metoden till en lagrad procedur.

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. Enkelt gilla/ogilla betygssystem i php och MySQL

  2. Enkelriktad synkronisering i realtid från sql-server till ett annat datalager

  3. Hur använder man MySql Database-frågor i Spring Boot?

  4. Hjälper det att tilldela indataparametrar för lagrad procedur till lokala variabler att optimera frågan?