Consulta recursiva para o postgresSQL pai/filho

pedir um lil ajudar em uma consulta recursiva sintaxe, e claro de resultados.

Como você vai ver que eu tenho uma tabela com a categoria de pai e filho ( um dos pais pode ter infinitas childs ). Consultando a categoria Dictionnary ( linkded para uma verdadeira categoria)

e quero voltar apenas o último filho de cada árvore de categorias

Atualizei meu código, e informações

EDITAR

WITH RECURSIVE cat(id) AS (
    SELECT
        *
    FROM
        category_dictionary
            LEFT JOIN category_dictionary.category ON category.id
    WHERE
        category.parent is NOT NULL
    UNION
    SELECT
        *
    FROM
        cat
            LEFT JOIN cat.category ON category.id
    WHERE
        category.parent is NOT NULL
)
SELECT
    *
FROM
    cat

Tabela de informações:

Category_dictionary é uma tabela de associação de categoria no parâmetro categoria

É a categoria principal mesa com o Pai de entrada.

Dados de exemplo:

category_dictionary entrada:

ID : name (Men) : category_id

categoria entradas:

category_id : name : parent (null or category_id)

Como resultado, eu quero que todas as crianças de cada categoria entradas, quero dizer, a categoria que não tem filho.

0
2019-09-17 11:14:09
origem
2 respostas

Você precisa de uma tabela de números. Para números pequenos, algo como isto:

with n as (
      select 1 as n union all
      select 2 union all
      select 3
     )
select userid, 'tv1' as tv
from t join
     n
     on t.tv1 <= n.n
union all
select userid, 'tv2' as tv
from t join
     n
     on t.tv2 <= n.n
union all
select userid, 'tv3' as tv
from t join
     n
     on t.tv3 <= n.n;

A tabela de números precisa ser grande o suficiente para lidar com os maiores valores na tabela.

+0
2019-09-17 13:56:02

Você pode usar o repeat + UNNEST

SELECT userid, productid
FROM your_table
CROSS JOIN UNNEST(repeat('tv1', tv1) || repeat('tv2', tv2) || repeat('tv3', tv3)) t(productid);

Note que um utilizador com todos os zeros não ser que uma parte da produção. Se você deseja manter os usuários vão todos os zeros, você pode fazer isso desde o Presto 319 (será lançado na próxima semana):

LEFT JOIN UNNEST(....) t(productid) ON true
+0
2019-09-17 13:56:02

Veja mais perguntas por marcas