3292
MySQLERRORNotableCTEsHIGH confidence
Recursive CTE recursive member cannot use DISTINCT
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 DISTINCT n+1 FROM cte WHERE n < 10) SELECT * FROM cte;
expected output
ERROR 3292 (HY000): DISTINCT not allowed in recursive CTE query block.
Fix
Use DISTINCT in outer query
Use DISTINCT in outer query
WITH RECURSIVE cte AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM cte WHERE n < 10) SELECT DISTINCT n FROM cte;
Why this works
Deduplication applied at the outer level after all recursive rows are generated.
What not to do
✕
Sources
Official documentation ↗
MySQL 8.0 — 3292 ER_CTE_RECURSIVE_FORBIDS_DISTINCT
Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev