sql >> Databáze >  >> RDS >> Mysql

Proč tento rekurzivní spoj vytváří:Data jsou příliš dlouhá

Dlouhá cesta dolů na MySQL 8 CTE stránka s manuálem je příklad, který ukazuje problém, který máte. Problém je v zásadě v tom, že vaše ids sloupec je příliš úzký pro ABC hodnota, která je mu přiřazena, když získá svou šířku z nerekurzivní části CTE (což je v podstatě délka ids tedy 2 znaky). Tento problém můžete vyřešit pomocí CAST na dostatečně velkou šířku, aby se vešly všechny výsledky, např.:

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

Aktualizace vaší ukázky




  1. Dotazujete se na pole oddělené čárkami?

  2. Jak obejít MySQL Chyba tabulky nelze znovu otevřít

  3. MySQL získá pozici řádku v ORDER BY

  4. Mysql vybírá přepínání řádků pro každé spuštění