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