Eu sinto que este é um problema comum e já vi isso em alguns desafios de SQL, mas pela minha vida, não consigo pensar claramente em uma solução.
Digamos que você tenha uma hierarquia desigual. Elementos que pertencem a outros elementos mas você não conhece o topo.
Digamos que seja um organograma da empresa para mantê-lo simples (na verdade, são dependências de tarefas, mas eh).
Então há uma mesa. Nome do funcionário e nome do chefe.
Employee name: Bob .... Boss Name: Dora
Employee name Dora .... Boss Name: Kim
E assim por diante. No meu caso, há uma informação adicional. Uma pessoa só se reporta a uma pessoa. Relacionamento um para um.
Existem N elementos no topo da cadeia que possuem Nome: Quem quer que seja Chefe: Nulo.
Então eu estava fazendo algo da seguinte forma:
select employee_name, boss_name
from boss_table b1
left join boss_table b2 on b1.boss_name = b2.employee_name
left join boss_table b3 on b2.boss_name = b3.employee_name
E assim por diante para tentar encontrar o 'Chefe Raiz' ou 'Chefe Superior' de cada funcionário. No entanto, alguns desses elementos aninhados são MUITO profundos - não quero fazer 20 junções ... ou pelo menos digitá-los - sinto que uma função recursiva é a resposta óbvia, mas não consigo descobrir - pensamentos?
O que você está procurando é chamado de CTE recursivo . Esta é uma das construções mais comuns para implementar recursão em um sistema de banco de dados. Um CTE recursivo é um conjunto de resultados nomeado temporário que se auto-refere para produzir os resultados, semelhante ao funcionamento de uma função recursiva tradicional.
Exemplo de organograma dos documentos acima:
Aqui estão alguns outros exemplos de implementação de CTEs recursivos no Snowflake.