Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

full outer join 3 tables with matching index in Postgre SQL

Tags:

sql

outer-join

I have an SQL query

SELECT * FROM A FULL OUTER JOIN B ON A.z = B.z WHERE A.z = 1 OR B.z = 1

where A.z and B.z are primary keys.

The purpose is to do a full outer join on two tables whilst their primary keys match a given value - so that only one row is returned.

But I got confused on how to extend it to 3 or more tables. The restriction that their primary keys match a given index so that only one row is return in total remains. How do you do it?

like image 506
Aman Avatar asked Dec 07 '25 06:12

Aman


1 Answers

First, note that in the provided query, the FULL OUTER JOIN that you request could be rewritten as:

         SELECT *
           FROM (SELECT * FROM A WHERE z = 1) A
FULL OUTER JOIN (SELECT * FROM B WHERE z = 1) B ON A.z = B.z

which makes (IMO) more clear what the data sources are and what the join condition is. For a moment, with your WHERE condition, I had the feeling that you wanted actually an INNER JOIN.

With this you can extend more easily probably:

         SELECT *
           FROM (SELECT * FROM A WHERE z = 1) A
FULL OUTER JOIN (SELECT * FROM B WHERE z = 1) B ON A.z = B.z
FULL OUTER JOIN (SELECT * FROM C WHERE z = 1) C ON COALESCE(A.z,B.z) = C.z
FULL OUTER JOIN (SELECT * FROM D WHERE z = 1) D ON COALESCE(A.z,B.z,C.z) = D.z
like image 165
Benoit Avatar answered Dec 08 '25 23:12

Benoit



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!