Un long chemin vers la page de manuel
de MySQL 8 CTE est un exemple qui montre le problème que vous rencontrez. Fondamentalement, le problème est que vos ids
la colonne est trop étroite pour ABC
la valeur qui lui est attribuée car elle tire sa largeur de la partie non récursive du CTE (qui est en fait la longueur de id
soit 2 caractères). Vous pouvez résoudre ce problème avec un CAST
à une largeur suffisamment grande pour s'adapter à tous les résultats, par exemple :
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