0

我有下表:

id   |     fruit |  parent |
----------------------------
id_1 |     apple |         |
id_2 |           |    id_3 |
id_3 | pineapple |         |
id_4 |      plum |    id_5 |
id_5 |      plum |         |

是否有可能通过子查询/横向连接获得以下输出:

id_1 apple
id_2 pineapple
id_4 plum

因此,如果水果为空,则获取父母的水果。尝试使用子查询来获取此信息,收集链接的父母以从中获取水果值,但在这种情况下,这些值与他们的 ID 配对,而不是与“孩子”ID 配对。所以是这样的:

id_1 apple
id_3 pineapple
id_4 plum
4

2 回答 2

1

如果这只是一个级别,你可以这样做:

select id, 
       coalesce(fruit, (select t2.fruit
                        from the_table t2
                        where t2.id = t1.parent
                        limit 1)) as fruit
from the_table t1

在线示例

于 2020-08-06T13:11:00.607 回答
1

你可以这样做:

编辑,对不起,错过了它是postgres。这有效

SELECT t1.id, (CASE WHEN t1.parent is NULL THEN t1.fruit ELSE t2.fruit END) as fruit
FROM fruits as t1
LEFT JOIN fruits as t2 ON t1.parent = t2.id;
于 2020-08-06T13:15:06.667 回答