sql >> Database >  >> RDS >> PostgreSQL

postgres recursieve query op dezelfde tabel

Ik neem aan dat je je where document_id=1 naar het onderste deel van de query wilt verplaatsen.

Wees echter op uw hoede om dit te doen, omdat een recursieve zoekopdracht de beperking niet injecteert in de with uitspraak. Met andere woorden, het scant eigenlijk je hele tafel, bouwt recursief elke mogelijkheid en filtert die die je nodig hebt eruit.

In de praktijk ben je beter af met een sql-functie, d.w.z. zoiets als dit:

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. Wat zijn de verschillen tussen opgeslagen procedures, functies en routines?

  2. Android SQLite-fout:het variabelenummer moet tussen ?1 en ?999 . liggen

  3. Hoe u dynamisch een voorbereide instructie kunt maken - en de query opnieuw kunt gebruiken?

  4. Kan geen verbinding maken met MySQL met Sequelize