sql >> Databáze >  >> RDS >> PostgreSQL

postgres rekurzivní dotaz na stejnou tabulku

Předpokládám, že chcete přesunout své where document_id=1 do spodní části dotazu.

Buďte však opatrní, protože rekurzivní dotaz nevloží omezení do with tvrzení. Jinými slovy, ve skutečnosti prohledá celou vaši tabulku, rekurzivně vytvoří všechny možnosti a odfiltruje ty, které potřebujete.

V praxi na tom budete lépe s funkcí sql, tedy něco takového:

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. Návrh databáze pro aplikace využívající hashtagy

  2. Připojte se ke 3 stolům s Count

  3. Dokáže MySQL Cluster zpracovat terabajtovou databázi

  4. Jak lze při použití živé funkce jquery odeslat pouze událost kliknutí (div)?