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

truy vấn đệ quy postgres trên cùng một bảng

Tôi hiểu rằng bạn muốn di chuyển where document_id =1 vào phần dưới của truy vấn.

Tuy nhiên, hãy thận trọng khi làm như vậy vì truy vấn đệ quy không đưa ràng buộc vào with bản tường trình. Nói cách khác, nó sẽ thực sự quét toàn bộ bảng của bạn, xây dựng đệ quy mọi khả năng và lọc ra những thứ bạn cần.

Bạn sẽ thấy tốt hơn với một hàm sql trong thực tế, tức là một cái gì đó như thế này:

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. EDB trở thành người dẫn đầu trong thị trường Postgres như thế nào

  2. chèn các giá trị DEFAULT

  3. Làm thế nào để sử dụng danh sách trắng và các câu lệnh soạn sẵn với Postgresql trong php?

  4. sử dụng bản sao trong postgresql?

  5. hoảng:sql:mong đợi 1 đối số đích trong Quét, không phải <number> golang, pq, sql