Un largo camino por la página del manual
de MySQL 8 CTE es un ejemplo que muestra el problema que está teniendo. Básicamente, el problema es que tus ids
la columna es demasiado estrecha para el ABC
se le asigna un valor a medida que obtiene su ancho de la parte no recursiva del CTE (que es efectivamente la longitud de id
es decir, 2 caracteres). Puedes resolver ese problema con un CAST
a un ancho lo suficientemente grande para adaptarse a todos los resultados, por ejemplo:
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