Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengapa concat rekursif ini menghasilkan:Data terlalu panjang

Jauh di bawah MySQL 8 CTE halaman manual adalah contoh yang menunjukkan masalah yang Anda alami. Pada dasarnya masalahnya adalah ids your Anda kolom terlalu sempit untuk ABC nilai yang diberikan padanya karena mendapat lebarnya dari bagian non-rekursif dari CTE (yang secara efektif merupakan panjang ids yaitu 2 karakter). Anda dapat memecahkan masalah itu dengan CAST dengan lebar yang cukup besar agar sesuai dengan semua hasil misalnya:

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

Pembaruan demo Anda




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Docker php:5.6-Lingkungan Pengembangan Apache tidak memiliki izin pada pemasangan volume

  2. SQL JOIN Untuk Menemukan Catatan Yang Tidak Memiliki Catatan Yang Cocok Dengan Nilai Tertentu

  3. Permintaan pembaruan MySQL dengan pernyataan yang disiapkan memberikan kesalahan

  4. Bagaimana cara membuat indeks pada bagian tanggal bidang DATETIME di MySql

  5. Kecualikan hasil baris yang memiliki nilai NULL di bidang apa pun?