Generate or traverse recursive data with `WITH RECURSIVE`.

Section: Querying, Joins, and Aggregation

Recursive CTE

sql
sql
WITH RECURSIVE nums(n) AS (
  VALUES (1)
  UNION ALL
  SELECT n + 1 FROM nums WHERE n < 10
)
SELECT * FROM nums;
Explanation

See summary for usage details.

Learn the surrounding workflow

Compare similar commands or jump into common fixes when this command is part of a bigger troubleshooting path.

Related commands

Same sheet · prioritizing Querying, Joins, and Aggregation
Common table expression
Use a CTE to structure a multi-step query.
OpenIn sheetsqlsame section
Basic SELECT
Fetch a sorted subset of rows.
OpenIn sheetsqlsame section
Use DISTINCT ON
Pick one row per group using PostgreSQL's `DISTINCT ON` extension.
OpenIn sheetsqlsame section
Inner join
Combine matching rows from two tables.
OpenIn sheetsqlsame section
Left join
Keep all rows from the left side even when no match exists.
OpenIn sheetsqlsame section
Group and filter aggregates
Aggregate rows and then filter groups.
OpenIn sheetsqlsame section