2016-01-20 166 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;