En lång väg ner på MySQL 8 CTE manualsidan
är ett exempel som visar problemet du har. I grund och botten är problemet att dina ids
kolumnen är för smal för ABC
värde som tilldelas till den när den får sin bredd från den icke-rekursiva delen av CTE (vilket faktiskt är längden på ids
dvs 2 tecken). Du kan lösa det problemet med en CAST
till en tillräckligt stor bredd för att passa alla resultat, t.ex.:
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