2016-01-20 168 views
2

我有一个表(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 

回答

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
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;