Ganz weit unten auf der MySQL 8 CTE Manual Page
ist ein Beispiel, das das Problem zeigt, das Sie haben. Grundsätzlich besteht das Problem darin, dass Ihre ids
Spalte ist zu schmal für ABC
Wert zugewiesen, da er seine Breite aus dem nicht-rekursiven Teil des CTE erhält (was effektiv die Länge von id
ist also 2 Zeichen). Sie können dieses Problem mit einem CAST
lösen auf eine Breite, die groß genug ist, um alle Ergebnisse aufzunehmen, z. B.:
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