Re: Can't seem to mix an inner and outer join in a query and get it to work right. - Mailing list pgsql-general

From David Gauthier
Subject Re: Can't seem to mix an inner and outer join in a query and get it to work right.
Date
Msg-id CAMBRECBExGpP7_y-+fweq-tNS56Mq3XnVD+7MO==fAArdGNKXg@mail.gmail.com
Whole thread Raw
In response to Re: Can't seem to mix an inner and outer join in a query and get it to work right.  ("David G. Johnston" <david.g.johnston@gmail.com>)
Responses Re: Can't seem to mix an inner and outer join in a query and get it to work right.
List pgsql-general
Thanks! 

Actually, I want the outer join first.  If it finds something, then move on to the inner join and filter out all those that don't join to a rec with 'autosmoke'.  But if the outer join does not connect to the workarea_env table, then just return what you have (the purpose of the outer join)


On Mon, Jun 29, 2020 at 9:10 PM David G. Johnston <david.g.johnston@gmail.com> wrote:
On Monday, June 29, 2020, David Gauthier <davegauthierpg@gmail.com> wrote:

                       sqf_id                       | sqf_sl  |  as_cl  | wa_id |   type   

----------------------------------------------------+---------+---------+-------+-----------

 arazhang_20.06.28-20:59:06_soc_navi24_main@4404799 | 4404957 | 4405363 |  2772 | autosmoke

 arazhang_20.06.28-20:59:06_soc_navi24_main@4404799 | 4404957 | 4405363 |  2773 |

 arazhang_20.06.28-20:59:06_soc_navi24_main@4404799 | 4404957 | 4405363 |  2774 |

 bgregory_20.06.29-09:46:49_raphael_main@1277530    | 1277949 |         |       |
(4 rows)


dvm.workarea_env on
dvdb-#                   (sqf.sqf_runs.submitted_changelist=dvm.workarea_env.p4_changelist)
dvdb-#                inner join dvm.dvm_events on
dvdb-#                   (dvm.workarea_env.wa_id = dvm.dvm_events.wa_id and dvm.dvm_events.type = 'autosmoke')
dvdb-# where sqf.sqf_Runs.submitted_shelvelist in (4404957,1277949);
                       sqf_id                       | sqf_sl  |  as_cl  | wa_id |   type    
----------------------------------------------------+---------+---------+-------+-----------
 arazhang_20.06.28-20:59:06_soc_navi24_main@4404799 | 4404957 | 4405363 |  2772 | autosmoke
(1 row)


Is there a way to retain the effect of that first outer join while enforcing that inner join ?

The quick non-testable answer is most likely.  I usually end up doing trial-and-error and adding possibly unnecessary parentheses to force the needed order of operations (or moving part of the join into an explicit subquery, possibly using a CTE/WITH).  Right now it seems that the query is forcing, via the inner join, a final output where the column type=‘autosmoke’.  i.e., its doing the outer join first then the inner.  You seem to want the reverse.

David J.

pgsql-general by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: PostgreSQL 12 - ERROR: could not rename file "pg_logical/snapshots/1A-7C00D890.snap.13594.tmp" to "pg_logical/snapshots/1A-7C00D890.snap": No space left on device
Next
From: FOUTE K. Jaurès
Date:
Subject: Re: PostgreSQL 12 - ERROR: could not rename file "pg_logical/snapshots/1A-7C00D890.snap.13594.tmp" to "pg_logical/snapshots/1A-7C00D890.snap": No space left on device