2013-05-28 44 views
0

我有以下DB結構的最後後裔:PostgreSQL的:如何找到一個線性的「祖先子孫」的關係

RELATIONSHIP_TABLE 
- id << primary key 
- id_ancestor << foreign key to the same table 
- id_entry << foreign key to "ENTRY_TABLE" 

ENTRY_TABLE 
- id 
- name 
... 

在表層次結構「RELATIONSHIP_TABLE」是線性的。這意味着一條記錄最多可以是另一條記錄的祖先。示例:

1. record1 
2. record2 <- record3 <- record4 
3. record5 <- record7 <- record9 <- record12 

特定層級中的每條記錄具有相同的「id_entry」。現在,我想找到具有特定「id_entry」的最後一個後代。下面的例子的結果是:

1. record1 
2. record4 
3. record12 

有沒有人知道一個解決方案?

感謝提前:)

QStormDS

回答

2
SELECT * 
FROM relationship_table rt 
WHERE rt.id_entry = 42 
AND NOT EXISTS (
    SELECT * FROM relationship_table nx 
    WHERE nx.id_entry = 42  -- you can possibly omit this clause 
    AND nx.id_ancestor = rt.id -- No children poining to rt ... 
    ) 
; 
+0

感謝很多:) – QStormDS

+0

嗨再次,這個查詢工作良好。但是,我有一個額外的要求,我不知道如何解決這個查詢。 要求:標誌(relationship_table的列)設置爲true的最後一個後裔 示例: record5(flag = false)< - record7(flag = true)< - record9(flag = false)< - record12 flag = false) 結果應該是record7 – QStormDS

+0

我不明白。我建議你開始一個新的問題,滿足所有舊的和新的要求。 – joop

相關問題