sql >> データベース >  >> RDS >> Mysql

この再帰的な連結が生成する理由:データが長すぎます

    MySQL8CTEのはるか下マニュアルページ あなたが抱えている問題を示す例です。基本的に問題は、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. SQLDev4.2トップSQL

    2. PDO ... SET NAMES utf8は危険ですか?

    3. SQLは値を複数の行に分割します

    4. SQLで列を追加する方法