sql >> Base de Datos >  >> RDS >> Mysql

Por qué este concat recursivo produce:Datos demasiado largos

Un largo camino por la página del manual de MySQL 8 CTE es un ejemplo que muestra el problema que está teniendo. Básicamente, el problema es que tus ids la columna es demasiado estrecha para el ABC se le asigna un valor a medida que obtiene su ancho de la parte no recursiva del CTE (que es efectivamente la longitud de id es decir, 2 caracteres). Puedes resolver ese problema con un CAST a un ancho lo suficientemente grande para adaptarse a todos los resultados, por ejemplo:

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

Actualización de su demo