On Sat, Oct 24, 2015 at 5:23 PM, Dane Foster <studdu...@gmail.com> wrote:

> On Sat, Oct 24, 2015 at 3:42 PM, Rafal Pietrak <ra...@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 <ra...@ztk-rp.eu
>> >> <mailto:ra...@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.
>>
>> Upss. Almost, but not quite. I've just read the manual on that
>> (http://www.postgresql.org/docs/9.4/static/queries-table-expressions.html
>> )
>> and it looks like "col1", "col2", etc in the above example are column
>> *aliases*. Right?
>>
>> So I have to list *all* the columns of the aliased table irrespectively
>> if I need any of them within the output, or not.
>>
>> It's a pity standard didn't choose to make column aliasing optional,
>> allowing for cherry pick what's aliased like following:
>>
>> .. JOIN table AS tb(column7 [as alias1], column3 [as alias2],...)
>>
>> thenx anyway, "Mandatory" column aliasing is helpfull too.
>>
>> -R
>>
>>
>>
>>
>> --
>> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-general
>>
> ​
> 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?
>
> Good luck,
>
> Dane
>
​
For the record SELECT * in my example is absolutely the wrong thing to do
but your original didn't leave me w/ any other option.

Dane
​

Reply via email to