DEV Community

Dmitry Romanoff
Dmitry Romanoff

Posted on • Edited on

1

How to join tables in PostgreSQL using the WITH clause?

To join tables in PostgreSQL using the WITH clause (also known as Common Table Expressions or CTEs), you first need to define these tables and the keys on which they will be joined. Let’s consider an example where we have five tables linked by a common key, such as id.

Suppose we have the following tables:

table1(id, data1)
table2(id, data2)
table3(id, data3)
table4(id, data4)
table5(id, data5)
Enter fullscreen mode Exit fullscreen mode

Here, each table contains an id column that will be used for joining.

The join will be conducted using an inner join, which means that only those rows that have a corresponding match in all tables will be included in the result. Here’s how you can do this using WITH:

WITH cte1 AS (
 SELECT t1.id, t1.data1, t2.data2
 FROM table1 t1
 INNER JOIN table2 t2 ON t1.id = t2.id
),
cte2 AS (
 SELECT c1.id, c1.data1, c1.data2, t3.data3
 FROM cte1 c1
 INNER JOIN table3 t3 ON c1.id = t3.id
),
cte3 AS (
 SELECT c2.id, c2.data1, c2.data2, c2.data3, t4.data4
 FROM cte2 c2
 INNER JOIN table4 t4 ON c2.id = t4.id
),
cte4 AS (
 SELECT c3.id, c3.data1, c3.data2, c3.data3, c3.data4, t5.data5
 FROM cte3 c3
 INNER JOIN table5 t5 ON c3.id = t5.id
)
SELECT * FROM cte4;
Enter fullscreen mode Exit fullscreen mode

Explanation:
cte1: The first CTE joins table1 and table2 by id. The result of this join, including id, data1, and data2, is used in the next CTE.
cte2: The second CTE takes the result from cte1 and joins it with table3 using the same key id. The result now includes data3.
cte3: The third CTE continues the process by adding data from table4 (data4).
cte4: The final CTE adds data from table5 (data5), completing the series of joins.
Final SELECT: Retrieves all data from the last CTE.

By using this structure, you can effectively manage and track each step of the joining process, which is particularly useful for debugging complex queries.

It also makes the code more readable and understandable for other developers.

ask_dima@yahoo.com

Heroku

Deliver your unique apps, your own way.

Heroku tackles the toil — patching and upgrading, 24/7 ops and security, build systems, failovers, and more. Stay focused on building great data-driven applications.

Learn More

Top comments (0)

👋 Kindness is contagious

Engage with a wealth of insights in this thoughtful article, valued within the supportive DEV Community. Coders of every background are welcome to join in and add to our collective wisdom.

A sincere "thank you" often brightens someone’s day. Share your gratitude in the comments below!

On DEV, the act of sharing knowledge eases our journey and fortifies our community ties. Found value in this? A quick thank you to the author can make a significant impact.

Okay