What is the best way to achieve a transitive join in postgresql? Currently, I want to do a full outer join for tables, a, b, and c. My query currently looks like this:
SELECT *
FROM a
FULL OUTER JOIN b
ON a."ID" = b."ID"
FULL OUTER JOIN c
ON a."ID" = c."ID"
I'm running into an issue where some records that match in table B and table C are showing up in different rows in the query output, and I realized that it must be because I have not explicitly joined tables B and C. What is the best way to write a "transitive" query where a=b, a=c, and b=c?
Here is an example of my current output. Right now, when a matching ID exists for just tables B and C, I get 2 different rows:
A ID | B ID | C ID |
---|---|---|
32 | 32 | null |
35 | 35 | 35 |
36 | null | 36 |
null | 42 | null |
null | null | 42 |
Here is my desired output:
A ID | B ID | C ID |
---|---|---|
32 | 32 | null |
35 | 35 | 35 |
36 | null | 36 |
null | 42 | 42 |
Use
using
:If in your real example, the columns have different names: