2015-08-30 40 views
2

選擇和再選擇我有如下表:PostgreSQL的在同一個表

Table person: 
id |  name | 
---------------+ 
1 |  adam | 
2 |  chris | 
3 |  nancy | 
4 | nathalie | 
5 |  holy | 


Table relation: 
id | person | parent | 
---+--------+--------+ 
1 |  2 |  1 | 
2 |  2 |  3 | 
3 |  1 |  4 | 
4 |  5 |  2 | 

我想有其產生,因爲這類似的查詢:

person | parent | 
-------+----------+ 
chris |  adam | 
chris | nancy | 
    adam | nathalie | 
    holy | chris | 

我不知道如何達到預期的效果。

回答

2

relation表已經顯示了誰的父母是誰。你只需要把它加入到person表(兩次),這些ID轉換爲名稱:

SELECT p1.name, p2.name 
FROM relation r 
JOIN person p1 ON p1.id = r.person 
JOIN person p2 ON p2.id = r.parent 
1

你只需要兩個連接:

select pp.name as person, pa.name as parent 
from relation r left join 
    person pp 
    on r.person = pp.id left join 
    parent pa 
    on r.parent = pa.id; 

這使用left join,以防一些值不知道(例如,如果你不知道一個人的父母)。