sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor denne rekursive konkat producerer:Data for lange

Et langt stykke nede på MySQL 8 CTE manualsiden er et eksempel, der viser det problem, du har. Grundlæggende er problemet, at dine ids kolonnen er for smal til ABC værdi, der tildeles den, når den får sin bredde fra den ikke-rekursive del af CTE'en (som faktisk er længden af ​​id dvs. 2 tegn). Du kan løse det problem med en CAST til en stor nok bredde til at passe til alle resultater, f.eks.:

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

Opdatering af din demo




  1. SQL-forespørgsel for at få summen af ​​alle kolonneværdier i den sidste række af et resultatsæt sammen med rækkesum (grupper efter)

  2. PDOStatement::execute():SQLSTATE[HY093]:Ugyldigt parameternummer:antallet af bundne variabler matcher ikke antallet af tokens

  3. Design af en opskriftsdatabase, der skal indeholde ingredienser såvel som underopskrifter

  4. Søg i mysqli-tabel med formular og visningsresultater