Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum diese rekursive Verkettung produziert:Daten zu lang

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

Aktualisierung Ihrer Demo