Можно ли получить значение столбца с помощью подзапроса на основе ключа столбца? - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующая таблица:

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_1 apple
id_3 pineapple
id_4 plum

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Вы можете сделать что-то вроде этого:

EDIT, извините, пропустил, что это было 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;
1 голос
/ 06 августа 2020

Если это только один уровень вверх, вы можете сделать это следующим образом:

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

Онлайн-пример

...