我有一个表 (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
最佳答案
一种选择是将您的表自联接到一个表的 parentid
字段和另一个表的 id
字段。我使用COALESCE()
从父表中选择gradeA
和gradeB
(如果它们存在),并默认为子值(如果它们存在)不存在。
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
关于sql - 从父行获取子行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892383/