2015-08-30 2 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 таблиц (дважды), чтобы перевести эти идентификаторы имен:

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, в случае, если некоторые из значений (например, если вы не знаете родителя).

Смежные вопросы