Molto lontano dalla pagina del manuale
di MySQL 8 CTE è un esempio che mostra il problema che stai riscontrando. Fondamentalmente il problema è che i tuoi ids
la colonna è troppo stretta per ABC
valore che gli viene assegnato quando ottiene la sua larghezza dalla parte non ricorsiva del CTE (che è effettivamente la lunghezza di id
cioè 2 caratteri). Puoi risolvere questo problema con un CAST
a una larghezza sufficientemente grande da contenere tutti i risultati, ad esempio:
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