我有一张桌子(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()从父表中选择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

关于sql - 从子行的父行获取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34892383/

10-13 00:49