从子行中的父行获取数据

时间:2016-01-20 05:44:20

标签: sql postgresql

我有一张表(PostgreSQL),如下所示:

id  parentid  name   gradeA gradeB
1              I-1    5       20
2              I-2    5        30
3     1        I-3    17       50
4     1        I-4    5        12

我希望得到gradeA=5的所有行,但是如果一行有parentid我希望在等级下我会看到父级的等级。

意思是我想得到:

id  parentid  name   gradeA gradeB
1              I-1    5       20
2              I-2    5        30
4     1        I-4    5        20     /gradeA and gradeB are if id=1 not id=4

2 个答案:

答案 0 :(得分:1)

一种选择是在一个表的parentid字段和另一个表的id上自行加入您的表。我使用COALESCE()从父表中选择gradeAgradeB(如果它们存在),如果它们不存在则默认为子值。

SELECT g1.id, g1.parentid, g1.name
    COALESCE(g2.gradeA, g1.gradeA) AS gradeA, COALESCE(g2.gradeB, g1.gradeB) AS gradeB
FROM grades g1 LEFT JOIN grades g2
    ON g1.parentid = g2.id
WHERE g1.gradeA = 5

答案 1 :(得分:1)

SELECT g1.id, g1.parentid, g1.name, g1.gradeA,
       coalesce(g2.gradeB, g1.gradeB) AS gradeB
FROM grades g1
LEFT JOIN grades g2 ON g2.id = g1.parentid
WHERE g1.gradeA = 5;