Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо този рекурсивен concat произвежда:Данните са твърде дълги

Дълъг път надолу към MySQL 8 CTE страница с ръководство е пример, който показва проблема, който имате. Основно проблемът е, че вашите ids колоната е твърде тясна за ABC му се присвоява стойност, тъй като той получава ширината си от нерекурсивната част на CTE (което на практика е дължината на id т.е. 2 знака). Можете да разрешите този проблем с CAST до достатъчно голяма ширина, за да побере всички резултати, напр.:

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

Актуализация на вашата демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL - дата и час в секунди

  2. Python Scrapy - попълване на start_url от mysql

  3. Курсорът в Mysql има други права освен потребител?

  4. Използване на EXISTS с MySQL

  5. Използване на MySQL тригери за регистриране на всички промени в таблицата във вторична таблица