with recursive (top level)


Apache DerbyBigQueryDb2 (LUW)H2MariaDBMySQLOracle DBPostgreSQLSQL ServerSQLite20072009201120132015201720192021✓ 3.8.3 - 3.43.0⊘ 3.5.7 - 3.7.11⚠ 2008R2 - 2022a✓ 8.4 - 16⊘ 8.3⚠ 11gR2 - 21ca⊘ 11gR1✓ 8.0.11 - 8.0.34⊘ 5.0 - 5.7✓ 10.2 - 10.11⊘ 5.1 - 10.1✓ 1.4.199 - 2.2.220⊘ 1.4.191⚠ 9.7 - 11.5.8ab⚠ 2.0c⊘ 10.15.1.3 - 10.16.1.1
  1. Without keyword recursive
  2. No join in recursive branch—use comma-join (,)
  3. Without column list: WITH RECURSIVE query_name AS (SELECT…)

The with recursive clause allows a query to refer to its own output:

WITH RECURSIVE query_name (column_name, …) AS (
   SELECT …
     FROM …
UNION ALL
   SELECT …
     FROM query_name -- <= Note the self-reference here
) [, …]
SELECT …
  FROM query_name

Normative References

The with recursive clause is defined in ISO/IEC 9075-2:2023 §7.17 as part of optional feature T131, “Recursive query”.

You can’t catch up on 20 years of SQL evolution in one day. Subscribe the newsletter via E-Mail, Twitter or RSS to gradually catch up and to keep modern-⁠sql.com on your radar.

About the Author

Photo of Markus Winand

Markus Winand provides insights into SQL and shows how different systems support it at modern-sql.com. Previously he made use-the-index-luke.com, which is still actively maintained. Markus can be hired as trainer, speaker and consultant via winand.at.

Buy the Book

Cover of “SQL Performance Explained”: Squirrel running on grass

The essence of SQL tuning in 200 pages

Buy now!
(paperback and/or PDF)

Paperback also available at Amazon.com.

Hire Markus

Markus offers SQL training and consulting for developers working at companies of all sizes.
Learn more »

Connect with Markus Winand

Markus Winand on LinkedInMarkus Winand on XINGMarkus Winand on Twitter
“modern SQL” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Legal | Contact | NO WARRANTY | Trademarks | Privacy and GDPR | CC-BY-NC-ND 3.0 license