On Sat, Oct 24, 2015 at 3:42 PM, Rafal Pietrak <rafal@ztk-rp.eu> wrote:
W dniu 24.10.2015 o 21:03, Rafal Pietrak pisze: > > > W dniu 24.10.2015 o 15:00, David G. Johnston pisze: >> On Sat, Oct 24, 2015 at 6:41 AM, Rafal Pietrak <rafal@ztk-rp.eu >> <mailto:rafal@ztk-rp.eu>>wrote: > [----------------------] >> >> Using explicit column names is expected - using "*" in non-trivial and >> production queries is not. >> >> You can move the aliases if you would like. >> >> SELECT * >> FROM tablea (col1, col2, col4) >> JOIN tableb AS tb1 (col1, col3, col5) USING (col1) >> JOIN tableb AS tb2 >> >> (col1, col6, col7) USING (col1) > > I knew there must have been something like this.
You may be able to accomplish that using aliased sub-selects as in-line views. The purpose of the sub-selects in this use-case is simply to cherry pick the columns you want.
SELECT * FROM (SELECT col1, col2, col4 FROM tablea) AS iv JOIN (SELECT co1, col3, col5 FROM tableb) AS tb1 USING (col1)) JOIN (SELECT col1, col6, col7 FROM tableb) AS tb22 USING (col1)
Please note, this may be a performance nightmare for large tables because w/o a WHERE clause that can be pushed down to the sub-selects each sub-select will do a full table scan.
Please note that the 3rd JOIN clause is nutty (I translated it from your original) because why would you join a table to itself just to select a different set of columns?