sql >> Databasteknik >  >> RDS >> PostgreSQL

postgres rekursiv fråga i samma tabell

Jag antar att du vill flytta din where document_id=1 till den nedre delen av frågan.

Var dock försiktig med att göra det, eftersom en rekursiv fråga inte injicerar begränsningen i with påstående. Med andra ord kommer den faktiskt att genomsöka hela din tabell, bygga rekursivt alla möjligheter och filtrera bort de du behöver.

Du kommer att ha det bättre med en sql-funktion i praktiken, det vill säga något sånt här:

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. Scenarier och steg får senaste ändringsproblem

  2. PostgreSQL:välja rader som inträffar en viss dag i veckan, i en specifik tidszon

  3. Enum datatyp kontra datatabell i MySQL?

  4. MySQL - Rader till kolumner