Yogesh Chauhan's Blog

SELF JOIN in Postgres

in Postgres on October 16, 2020

A Self JOIN is a regular join, but the table is joined with itself.

Basically, it looks like this.


There is no keyword like SELF. We can use INNER JOIN, LEFT JOIN, RIGHT JOIN etc to JOIN table to itself. Sound weird. Isn’t it?


SELECT a.column2, b.column2
FROM table a
INNER JOIN table b
ON a.column = b.column;

I am using alias as well in the syntax. You can use name of the table instead of alias. Alias makes it better to write the query. Learn more about alias in this post:

Column And Table Alias In Postgres

INNER SELF JOIN Query Example 

I am using the database for all examples. It is available on my Github public repo

SELECT c.contact_name, cu.contact_title 
FROM customers c RIGHT JOIN customers cu
ON c.customer_id = cu.customer_id

contact_name.       contact_title
"Maria Anders"    "Sales Representative"
"Ana Trujillo"    "Owner"
"Antonio Moreno"    "Owner"
91 rows

I know, I have the same question, why we need to JOIN same tables!

We use a self join when a table references data in itself.

SELF JOIN Query Example

Let’s say we want to find out company names of the customers whose city are same but id are not. Means they live in same city.

This is the example of SELF JON without using the keyword JOIN. 

SELECT A.company_name AS companyName1, B.company_name AS companyName2, A.city
FROM customers A, customers B
WHERE A.customer_id <> B.customer_id
AND A.city = B.city 
ORDER BY A.city;

companyName1                       companyName2                     city
"Océano Atlántico Ltda."	       "Cactus Comidas para llevar"	    "Buenos Aires"
"Océano Atlántico Ltda."	       "Rancho grande"                  "Buenos Aires"
"Cactus Comidas para llevar"	   "Océano Atlántico Ltda."	        "Buenos Aires"
"Cactus Comidas para llevar"	   "Rancho grande"	                "Buenos Aires"
"Rancho grande"	                   "Océano Atlántico Ltda."	        "Buenos Aires"
"Rancho grande"	                   "Cactus Comidas para llevar"	    "Buenos Aires"
"Furia Bacalhau e Frutos do Mar"   "Princesa Isabel Vinhos"	        "Lisboa"
"Princesa Isabel Vinhos"	       "Furia Bacalhau e Frutos do Mar" "Lisboa"
88 rows

Most Read

#1 How to check if radio button is checked or not using JavaScript? #2 Solution to “TypeError: ‘x’ is not iterable” in Angular 9 #3 How to add Read More Read Less Button using JavaScript? #4 How to uninstall Cocoapods from the Mac OS? #5 PHP Login System using PDO Part 1: Create User Registration Page #6 How to Use SQL MAX() Function with Dates?

Recently Posted

#Aug 15 Is PHP still good for back-end programming? #Aug 10 How to create a multisite network in WordPress? #Aug 3 How to create a circle that follows a cursor using JavaScript and CSS? #Aug 3 How to make a curtain slider using jQuery and CSS? #Aug 2 How to progressively load images and add a blurry placeholder? #Aug 1 How to create a placeholder loader (throbber) using CSS?
You might also like these
How to compile and watch Sass using Gulp in WordPress?SCSSHow destructuring works in React?ReactUse SwiperJS to create mobile touch sliders fastMiscellaneousHow to add Date and Time picker in HTML and get the values using JavaScript?HTMLWordPress: How to get field values in Advanced Custom Fields?WordPressHow to check if a link has http or https in it in JavaScript?JavaScript