PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Permintaan postgresql untuk mendapatkan hubungan induk-anak tingkat-n yang disimpan dalam satu tabel

Dengan Postgres Anda dapat menggunakan ekspresi tabel umum rekursif:

with recursive rel_tree as (
   select rel_id, rel_name, rel_parent, 1 as level, array[rel_id] as path_info
   from relations 
   where rel_parent is null
   union all
   select c.rel_id, rpad(' ', p.level * 2) || c.rel_name, c.rel_parent, p.level + 1, p.path_info||c.rel_id
   from relations c
     join rel_tree p on c.rel_parent = p.rel_id
)
select rel_id, rel_name
from rel_tree
order by path_info;

SQLFiddle berdasarkan contoh Anda:http://sqlfiddle.com/#!11/59319/19

(Saya mengganti spasi untuk indentasi dengan garis bawah karena SQLFiddle tidak menampilkan spasi dengan benar)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:memberikan akses ke peran/pengguna untuk tabel masa depan yang dibuat oleh peran/pengguna yang berbeda

  2. Kendala Postgres memastikan satu kolom dari banyak ada?

  3. Bagaimana cara melakukan agregasi yang sama pada setiap kolom, tanpa mencantumkan kolom?

  4. SQL LIKE kondisi untuk memeriksa integer?

  5. Mengaktifkan dukungan PostgreSQL di PHP di Mac OS X