2016-08-04 16 views
-1

二つのテーブルがあります:レイヤーと画像PostgresのSQL再帰クエリ

今、私が知りたい
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 

は、画像5の最寄りの親画像はイメージですか?
答えは画像2

どのようにこのようなSQLクエリを記述しますか?
ありがとうございました!

+1

https://stackoverflow.com/questions/ [ここ]((https://www.postgresql.org/docs/current/static/queries-with.html)および[Postgresのチュートリアル]を参照してくださいタグ付き/ postgresql +再帰クエリ) –

答えて

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;