sql >> Databasteknik >  >> RDS >> Mysql

Varför denna rekursiva konkat producerar:Data för lång

En lång väg ner på MySQL 8 CTE manualsidan är ett exempel som visar problemet du har. I grund och botten är problemet att dina ids kolumnen är för smal för ABC värde som tilldelas till den när den får sin bredd från den icke-rekursiva delen av CTE (vilket faktiskt är längden på ids dvs 2 tecken). Du kan lösa det problemet med en CAST till en tillräckligt stor bredd för att passa alla resultat, t.ex.:

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

Uppdatering av din demo




  1. PHP MYSQL importera CSV och sedan jämföra och ta bort redundanta poster

  2. CannotAcquireLockException (Spring, Hibernate, MySQL)

  3. sqlplus hur man hittar information om den för närvarande anslutna databassessionen

  4. MySQL automatisk ökning baserat på grupp