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

kueri rekursif postgres pada tabel yang sama

Saya kira Anda ingin memindahkan tempat document_id=1 Anda ke bagian bawah kueri.

Namun, berhati-hatilah untuk melakukannya, karena kueri rekursif tidak memasukkan batasan ke dalam with penyataan. Dengan kata lain, itu sebenarnya akan memindai seluruh tabel Anda secara berurutan, membangun setiap kemungkinan secara rekursif, dan menyaring yang Anda butuhkan.

Anda akan lebih baik dengan fungsi sql dalam praktiknya, yaitu sesuatu seperti ini:

create or replace function gen_links(int) returns table (doc_id int, doc_url text) as $$
WITH  RECURSIVE generate_links(document_id,url_id) as(  
    select document_id,url_id from document_urls where document_id=$1
UNION ALL
    select du.document_id,du.url_id from generate_links gl,document_urls du
    where gl.url_id=du.url_id 
)

SELECT * FROM generate_links GROUP BY url_id,document_id;
$$ language sql stable;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai sisipkan Postgres dari sisipan di tabel lain

  2. Tipe pengembalian fungsi SQL:TABLE vs catatan SETOF

  3. Hubungkan Aplikasi iPhone ke PostgreSQL Menggunakan Libpq

  4. Tidak dapat menggabungkan array

  5. Mengalikan dua kolom yang telah dihitung pada pernyataan CASE