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