PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgres рекурсивна заявка на същата таблица

Предполагам, че искате да преместите вашия where document_id=1 в долната част на заявката.

Внимавайте обаче да го правите, защото рекурсивната заявка не инжектира ограничението в with изявление. С други думи, той всъщност ще сканира seq цялата ви таблица, рекурсивно ще изгради всяка възможност и ще филтрира тези, от които се нуждаете.

Ще бъдете по-добре с sql функция на практика, т.е. нещо подобно:

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. PostgreSQL, триграми и подобие

  2. Максимален размер на типа данни TEXT в postgresql

  3. Мониторинг и одит на производителността PostgreSQL - Топ ресурси

  4. Синтактична грешка при или близо до потребител при добавяне на ограничение Postgres

  5. Мигриране на SQL Server 2008 DB към Postgres