Дълъг път надолу към MySQL 8 CTE страница с ръководство
е пример, който показва проблема, който имате. Основно проблемът е, че вашите ids
колоната е твърде тясна за ABC
му се присвоява стойност, тъй като той получава ширината си от нерекурсивната част на CTE (което на практика е дължината на id
т.е. 2 знака). Можете да разрешите този проблем с CAST
до достатъчно голяма ширина, за да побере всички резултати, напр.:
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
Актуализация на вашата демонстрация