Een heel eind op de MySQL 8 CTE handmatige pagina
is een voorbeeld dat het probleem laat zien dat u ondervindt. Het probleem is eigenlijk dat uw ids
kolom is te smal voor het ABC
waarde die eraan wordt toegewezen omdat het zijn breedte krijgt van het niet-recursieve deel van de CTE (wat in feite de lengte is van id
d.w.z. 2 tekens). Je kunt dat probleem oplossen met een CAST
tot een breedte die groot genoeg is om in alle resultaten te passen, bijvoorbeeld:
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