sql - 从父行获取子行数据

标签 sql postgresql

我有一个表 (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()从父表中选择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/

相关文章:

c# - 表中有更多属性会降低性能吗?

mysql - SQL 中分组属性的不同值

java - 使用 hibernate 在 Postgres 上设置随机种子

java - 在 Eclipse 中找不到 JDBC 驱动程序,但在独立运行时找到

postgresql - 为什么gorm postgresql在“)”处或附近抛出pq:语法错误?

mysql - 查询行使用Order by A,如果A值相同,则Order by B为第二标准

php - 高级(我的)SQL 查询,这可能吗?

mysql - 即使使用覆盖索引也能优化 COUNT(DISTINCT) 缓慢

ruby-on-rails - 使用 postgresql 和 ruby​​ on rails 优化时间序列数据检索的数据库查询

python - 在 sqlalchemy 中使用 PostgreSQL 聚合 ORDER BY