Et langt stykke nede på MySQL 8 CTE manualsiden
er et eksempel, der viser det problem, du har. Grundlæggende er problemet, at dine ids
kolonnen er for smal til ABC
værdi, der tildeles den, når den får sin bredde fra den ikke-rekursive del af CTE'en (som faktisk er længden af id
dvs. 2 tegn). Du kan løse det problem med en CAST
til en stor nok bredde til at passe til alle resultater, f.eks.:
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