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

PostgreSQL:Loop Hingga Kondisi Benar

Pemikiran Anda salah untuk SQL. Jangan berpikir dalam hal loop dan kondisi dan variabel; sebagai gantinya, pikirkan tentang bagaimana menggambarkan data yang Anda inginkan. Bagian yang sulit adalah Anda ingin kueri merujuk ke hasilnya sendiri dan itulah yang CTE rekursif adalah untuk:

Anda sedang mencari sesuatu seperti ini:

with recursive path as (
    select id, parent from T where id = 4
    union all
    select t.id, t.parent from T t join path p on t.id = p.parent
)
select id, parent
from path

Itu akan memberi Anda ini:

 id | parent 
----+--------
  4 |      2
  2 |      1
  1 |       

dan kemudian Anda dapat menyatukannya kembali di jalur yang akan lebih tertaut-list (atau apa pun yang sesuai dalam bahasa klien Anda) di luar database. Anda tidak harus menyertakan parent tentu saja, tetapi menyertakannya akan membantu Anda memperbaiki "petunjuk".




  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 - pemicu, perbarui stempel waktu pada pembaruan lapangan

  2. INSERT INTO ... RETURNING - referensi kolom ambigu

  3. Ukuran transaksi maksimum di PostgreSQL

  4. PostgreSQL tidak dapat terhubung:definisi layanan tidak ditemukan

  5. Berhenti (lama) menjalankan kueri SQL di PostgreSQL saat sesi atau permintaan tidak ada lagi?