Długa droga do MySQL 8 CTE strona podręcznika
to przykład, który pokazuje problem, który masz. Zasadniczo problem polega na tym, że twoje ids kolumna jest zbyt wąska dla ABC wartość jest do niego przypisywana, ponieważ pobiera swoją szerokość z nierekurencyjnej części CTE (która jest faktycznie długością id tj. 2 znaki). Możesz rozwiązać ten problem za pomocą CAST do wystarczająco dużej szerokości, aby zmieścić wszystkie wyniki, np.:
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
Aktualizacja wersji demonstracyjnej