2016-08-04 18 views
-1

ich verwende PostgreSQL gibt es zwei Tabellen: Schichten und BilderPostgres SQL rekursive Abfragen

LAYERS (layer_id varchar PRIMARY KEY, 
     parent_id varchar REFERENCES LAYERS(layer_id)) 

IMAGES (image_id varchar UNIQUE, REFERENCES LAYERS(layer_id)) 

in LAYERS table: 1->2->3->4->5->6 (1 is the parent of 2) 
in IMAGES table: 1,2,5,6 

Jetzt weiß ich will, das Bild ist das nächste übergeordnete Bild von Bild 5?
Die Antwort ist Bild 2

Wie schreibe ich solche SQL-Abfrage?
Vielen Dank!

+1

Siehe [Postgres Tutorial] (https://www.postgresql.org/docs/current/static/queries-with.html) und [hier] (https://stackoverflow.com/questions/ getaggte/postgresql + rekursive-Abfrage) –

Antwort

0
WITH RECURSIVE parents(id) AS(
    SELECT parent FROM layers WHERE layerid = '5' 
    UNION 
    SELECT layers.parent FROM parents, layers WHERE layers.layerid = parents.id 
     AND parents.id NOT IN (SELECT imageid FROM images) 
) 
SELECT imageid FROM parents, images WHERE images.imageid = parents.id;