PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

rekurencyjne zapytanie postgres na tej samej tabeli

Rozumiem, że chcesz przenieść swój adres document_id=1 do dolnej części zapytania.

Należy jednak zachować ostrożność, ponieważ zapytanie rekurencyjne nie wprowadza ograniczenia do with oświadczenie. Innymi słowy, w rzeczywistości przeprowadzi sekwencyjne skanowanie całej tabeli, rekursywnie zbuduje każdą możliwość i odfiltruje te, których potrzebujesz.

W praktyce wyjdzie ci lepiej z funkcją sql, czyli czymś takim:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uciec przed znakiem zapytania (?) za pomocą Spring JpaRepository?

  2. Nie można połączyć się z kontenerem docker Postgres z kontenera Golang

  3. Usunięto wiersze z odbitej tabeli za pomocą SQLAlchemy

  4. Jak w PostgreSQL możemy stwierdzić, czy każdy indeks tabeli jest zgrupowany, czy nie?

  5. Jak działa funkcja Scale() w PostgreSQL