Skip to main content
Drizzle ORM provides powerful support for subqueries, allowing you to nest queries within other queries for complex data retrieval and manipulation.

Basic Subquery

Create and use a subquery:

Subquery in WHERE Clause

Use subqueries for filtering:

Subquery in SELECT

Include subquery results in select:

Common Table Expressions (CTE)

Use WITH clauses for readable complex queries:

Subquery Joins

Join with subquery results:

Correlated Subqueries

Subqueries that reference outer query:

Subquery with Aggregations

Combine subqueries with aggregate functions:

Lateral Joins (PostgreSQL)

Use LATERAL for more powerful correlated subqueries:

Subquery in FROM Clause

Use subquery as a data source:

Nested Subqueries

Subqueries within subqueries:

Scalar Subqueries

Subqueries returning a single value:

Insert from Subquery

Insert data from a select query:

Update with Subquery

Update using subquery results:

Delete with Subquery

Delete based on subquery:

Union with Subqueries

Combine multiple subquery results:

Type Safety

Subqueries maintain full type safety:

Performance Tips

1

Use CTEs for Readability

CTEs make complex queries easier to understand and maintain
2

Index Subquery Columns

Ensure columns used in subquery joins and WHERE clauses are indexed
3

Limit Subquery Results

Use LIMIT in subqueries when you don’t need all rows
4

Consider Materialized CTEs

For expensive subqueries used multiple times, consider materialized views
5

Test Query Plans

Use EXPLAIN to understand how the database executes your subqueries

Common Patterns

Top N per Group

Deduplication

Running Totals

Pivot Tables

Next Steps

Joins

Combine subqueries with joins

Aggregations

Use aggregations in subqueries

Select Queries

Master the select query builder

Performance

Optimize subquery performance