我有一张表(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
答案 0 :(得分:1)
一种选择是在一个表的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
答案 1 :(得分: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;