2016-01-22 36 views
5
İşte

bir Verilen Çocuk itibaren Ebeveynlerin Bütün hiyerarşisini alın verilerin bir örnek ben bakıyorum bir özyinelemeli sorgu kullanmaPostgresql

id  | name | parent_id 
_______|____________|______________ 
1  |Root  | null 
2  |Parent #2 | 1 
3  |Parent #3 | 1 
4  |Parent #4 | 2 
5  |Child #5 | 2 
6  |Child #6 | 2 
7  |Child #7 | 3 
8  |Child #8 | 3 
9  |Child #9 | 3 

, ben başlamak mümkün duyuyorum Bir Ebeveyn ve tüm ilişkili çocukları edinin.

Sorum şu: Çocukta nasıl başlayabilirim ve ilgili tüm ebeveynleri, büyükanne ve büyükbabaları, vb. Herhangi bir yardım büyük takdir

id  | name | parent_id 
_______|____________|______________ 
1  |Root  | 0 
3  |Parent #3 | 1 
9  |Child #9 | 3 

:

Yani, Çocuk 9. verilen, şu döndüren bir sorgu istiyorum. Bunun gibi

cevap

7

:

with recursive whosYourDaddy as (

    --start with the "anchor" row 
    select 
    * 
    from foo 
    where 
    id = 9 --parameterize me 

    union all 

    select 
    foo.* 
    from foo 
    join whosYourDaddy on whosYourDaddy.parent_id = foo.id 
) 

select 
    * 
from whosYourDaddy 
order by 
    id; 

Sonuç:

id name  parent_id 
----------------------- 
1 Root  (null) 
3 Parent 3 1 
9 Child 9 3 

Kodu:

http://sqlfiddle.com/#!15/a5fb9/12

+0

sayesinde neil-mcguian @, did it! Bilgisayarım uzayıp bitene kadar sürekli olarak sorguyu çalıştırdığım için senden "sendikaya" dönüştürmek zorunda kaldım. Sadece 'sendika' ile, sorgu hızla koştu ve sonuçlar tam olarak istediğim şeydi. – randymay