Re: Using a CTE for an update - Mailing list pgsql-general

From Bosco Rama
Subject Re: Using a CTE for an update
Date
Msg-id 51A9753C.8010603@boscorama.com
Whole thread Raw
In response to Re: Using a CTE for an update  (David Salisbury <salisbury@globe.gov>)
List pgsql-general
On 05/31/13 16:27, David Salisbury wrote:
>
> It would seem related to the above to me, but apparently it's not.
> -------------------
> According to the standard, the column-list syntax should allow a list of
> columns to be assigned from a single row-valued expression,
> such as a sub-select:
>
> UPDATE accounts SET (contact_last_name, contact_first_name) =
>      (SELECT last_name, first_name FROM salesmen
>       WHERE salesmen.id = accounts.sales_id);
>
> This is not currently implemented — the source must be a list of independent
> expressions.
> -------------------

You *could* use the single column version:

update atmos_sites asites
    set stationid = (select my.stationid
                        from my_stations my
                        where my.atmos_site_id = asites.id);

Not sure how the performance would compare to the version mentioned in
the prior post though.  Might be worth investigating as it would very
much depend on your schema and available indices.

HTH

Bosco.


pgsql-general by date:

Previous
From: Adrian Klaver
Date:
Subject: Re: Insert with query
Next
From: Tom Lane
Date:
Subject: Re: What are ExecSeqMarkPos and ExecSeqRestrPos used for