sql >> Base de Datos >  >> RDS >> PostgreSQL

consulta recursiva de postgres en la misma tabla

Supongo que desea mover su where document_id=1 a la parte inferior de la consulta.

Sin embargo, tenga cuidado al hacerlo, porque una consulta recursiva no inyecta la restricción en el with declaración. En otras palabras, en realidad escaneará secuencialmente toda la tabla, creará recursivamente todas las posibilidades y filtrará las que necesite.

Estará mejor con una función sql en la práctica, es decir, algo como esto:

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;