Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que essa concat recursiva produz:Dados muito longos


Um longo caminho até o MySQL 8 CTE página de manual é um exemplo que mostra o problema que você está tendo. Basicamente, o problema é que seus ids coluna é muito estreita para o ABC valor que está sendo atribuído a ele à medida que obtém sua largura da parte não recursiva do CTE (que é efetivamente o comprimento de id ou seja, 2 caracteres). Você pode resolver esse problema com um CAST para uma largura grande o suficiente para caber todos os resultados, por exemplo:
with recursive cte(greatest_id, ids, total) as (
    select     id,
               CAST(id AS CHAR(5)) AS ids, 
               val
    from       tbl
    union all
    select     tbl.id,
               concat(cte.ids, tbl.id),
               cte.total + tbl.val
    from       cte 
    inner join tbl 
            on tbl.id > cte.greatest_id
           and cte.total + tbl.val <= 6
) 
select ids, total from cte

Atualização de sua demonstração