Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi ce concat récursif produit :des données trop longues

Un long chemin vers la page de manuel de MySQL 8 CTE est un exemple qui montre le problème que vous rencontrez. Fondamentalement, le problème est que vos ids la colonne est trop étroite pour ABC la valeur qui lui est attribuée car elle tire sa largeur de la partie non récursive du CTE (qui est en fait la longueur de id soit 2 caractères). Vous pouvez résoudre ce problème avec un CAST à une largeur suffisamment grande pour s'adapter à tous les résultats, par exemple :

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

Mise à jour de votre démo