我有一张桌子(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,我想在grade下看到父级的等级。意思是我想得到:
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/