Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego ta rekurencyjna konkat generuje:Dane są za długie

Długa droga do MySQL 8 CTE strona podręcznika to przykład, który pokazuje problem, który masz. Zasadniczo problem polega na tym, że twoje ids kolumna jest zbyt wąska dla ABC wartość jest do niego przypisywana, ponieważ pobiera swoją szerokość z nierekurencyjnej części CTE (która jest faktycznie długością id tj. 2 znaki). Możesz rozwiązać ten problem za pomocą CAST do wystarczająco dużej szerokości, aby zmieścić wszystkie wyniki, np.:

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

Aktualizacja wersji demonstracyjnej




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. asp.net web-service wysokie użycie procesora

  2. Najlepszy sposób na sprawdzenie, czy wiersz istnieje w tabeli MySQL

  3. Sprawdź czas odpowiedzi na wysłanej wiadomości - możliwe przy użyciu tylko SQL?

  4. MySQL 'user_id', w którym klauzula jest niejednoznacznym problemem

  5. Jak uzyskać rozmiar blob w PHP lub SQL?