sql >> Database teknologi >  >> RDS >> PostgreSQL

Styret acyklisk graf:find alle stier fra en bestemt knude

MED RECURSIVE parent_line(path, id) AS (SELECT ARRAY[(row_number() OVER (PARTITION BY CP.idc))::integer], C.id FROM categorias C JOIN categ_parents CP ON C.id =CP.idparent HVOR CP.idc =36 UNION ALL SELECT PL.path || (row_number() OVER (PARTITION BY PL.id)::integer, C.id FRA categorias C JOIN categ_parents CP ON C.id =CP .idparent JOIN parent_line PL på CP.idc =PL.id),real_parent_line(path, chainid, id) AS ( SELECT PL.path, (row_number() OVER (PARTITION BY PL.id)), PL.id FROM parent_line PL WHERE PL.id IN ( SELECT id FROM categorias C LEFT JOIN categ_parents CP ON (C.id =CP.idc) WHERE CP.idc IS NULL ) UNION ALL SELECT PL.path, chainid, PL.id FROM parent_line PL, real_parent_line RPL WHERE array_upper(PL.path,1) + 1 =array_upper(RPL.path,1) OG PL.path =RPL.path[1:(array_upper(RPL.path,1)-1)])SELECT array_accum(id) AS idsFROM real_parent_line RPLGROUP BY chainid;

Den første WITH klausul giver dette:

sti | id------------------------"{1}" 31"{1,1}" 22"{1,2}" 30"{1 ,1,1}" 20"{1,1,2}" 8"{1,2,1}" 20"{1,1,2,1}" 5"{1,1,1,1}" 1"{1,2,1,2}" 1"{1,1,2,1,1}" 2"{1,1,2,1,1,1}" 1"{1,1,2 ,1,1,2}" 20"{1,1,2,1,1,2,1}" 1

Tak til #[email protected] for lidt hjælp.




  1. at ændre til funktion i R-pakken og installere på Ubuntu

  2. Er der nogen måde at lade MySQL-serveren "skubbe" DB-opdateringer til et klientprogram?

  3. Tjek og optimer MySQL-databasen automatisk med Crontab/Cron

  4. Oracle 10:Brug af HEXTORAW til at udfylde blob-data