sql >> Database teknologi >  >> RDS >> PostgreSQL

postgres rekursiv forespørgsel på samme tabel

Jeg går ud fra, at du vil flytte dit where document_id=1 ind i den nederste del af forespørgslen.

Vær dog forsigtig med at gøre det, fordi en rekursiv forespørgsel ikke injicerer begrænsningen i with udmelding. Med andre ord, det vil faktisk seq scanne hele din tabel, rekursivt bygge alle muligheder og filtrere dem fra, du har brug for.

Du vil være bedre stillet med en sql-funktion i praksis, altså noget som dette:

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. optimizer_search_depth i Google Cloud SQL

  2. Hvordan får man andre kolonner med er ikke i GROUP BY klausul i en oracle select sql?

  3. PL/SQL - Eksempel på hæv applikationsfejl

  4. Ekko/retur tilføjer mellemrum før variabel