Also, the junction table approach still doesn't give me what I want, since the un-junctioned records collide on the join criteria:
[local] dian#dian= select * from left_table; id │ val ────┼─────── 1 │ one 2 │ two 3 │ three (3 rows) Time: 0.559 ms [local] dian#dian= select * from right_table; id │ val ────┼───── 1 │ 1 2 │ 2 3 │ 3 (3 rows) Time: 0.587 ms [local] dian#dian= select * from left_right; left_id │ right_id ─────────┼────────── 1 │ 3 3 │ 1 (2 rows) Time: 0.533 ms [local] dian#dian= select * from left_table l left outer join left_right lr on lr.left_id = l.id right outer join right_table r on r.id = lr.right_id; id │ val │ left_id │ right_id │ id │ val ────────┼────────┼─────────┼──────────┼────┼───── 1 │ one │ 1 │ 3 │ 3 │ 3 3 │ three │ 3 │ 1 │ 1 │ 1 (null) │ (null) │ (null) │ (null) │ 2 │ 2 (3 rows) Time: 0.984 ms
To get unaffiliated lefts and rights to show up, you have to run the query twice and union the results:
[local] dian#dian= select * from left_table l dian#dian- left outer join left_right lr on lr.left_id = l.id dian#dian- left outer join right_table r on r.id = lr.right_id dian#dian- union dian#dian- select * from left_table l dian#dian- left outer join left_right lr on lr.left_id = l.id dian#dian- right outer join right_table r on r.id = lr.right_id; id │ val │ left_id │ right_id │ id │ val ────────┼────────┼─────────┼──────────┼────────┼──────── 3 │ three │ 3 │ 1 │ 1 │ 1 (null) │ (null) │ (null) │ (null) │ 2 │ 2 2 │ two │ (null) │ (null) │ (null) │ (null) 1 │ one │ 1 │ 3 │ 3 │ 3 (4 rows) Time: 0.697 ms
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Also, the junction table approach still doesn't give me what I want, since the un-junctioned records collide on the join criteria:
To get unaffiliated lefts and rights to show up, you have to run the query twice and union the results: