3293
MariaDBERRORNotableCTEsHIGH confidence

Recursive CTE recursive member cannot use window functions

Production Risk

Low — query is rejected.

How to reproduce
trigger — this will error
trigger — this will error
WITH RECURSIVE cte AS (SELECT 1 AS n UNION ALL SELECT ROW_NUMBER() OVER () FROM cte WHERE n < 5) SELECT * FROM cte;

expected output

ERROR 3293 (HY000): Window functions are not allowed in recursive CTE query block.

Fix

Apply window function in outer query

Apply window function in outer query
WITH RECURSIVE cte AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM cte WHERE n < 5) SELECT ROW_NUMBER() OVER (ORDER BY n) AS rn, n FROM cte;

Why this works

Window functions applied to the final result set work correctly.

What not to do

Sources
Official documentation ↗

MySQL 8.0 — 3293 ER_CTE_RECURSIVE_FORBIDS_WINDOW_FUNCTIONS

Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev

← All MariaDB errors