Postgresql在同一个表中选择并进行子选择

时间:2015-08-30 16:41:34

标签: sql postgresql select join

我有以下表格:

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 个答案:

答案 0 :(得分: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 :(得分: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