Re: correlated multi-set update?

From: Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com>
To: Marty Scholes <marty(at)outputservices(dot)com>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: correlated multi-set update?
Date: 2004-03-09 23:14:26
Message-ID: 20040309151307.E7528@megazone.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql


On Tue, 9 Mar 2004, Marty Scholes wrote:

> Hello,
>
> My company recently deployed Pg 7.4.1. on Solaris for an experimental
> project and is using the experience to evaluate its viability for
> migration from Oracle 7.0.
>
> While I like a lot of the features of Pg, one thing I noticed that
> "seems" to be missing is the ability to set multiple fields in an update
> using a correlated subquery.
>
> For example, I have a statement that copies fields from a template (bar)
> into another table (foo) based on a list of keys in a third table (keylist):
>
> UPDATE foo f
> SET (f1, f2, f3, f4, f5) = (
> SELECT f1, f2, f3, f4, f5
> FROM bar b
> WHERE f.fk = b.pk
> )
> WHERE f.pk IN (
> SELECT l.pk
> FROM keylist l
> );
>
> In Oracle this works wonders, but it seems to fail under Pg because Pg
> wants single field updates and does not allow subqueries.
>
> Next I tried:
>
> UPDATE foo f
> SET f1 = (
> SELECT f1
> FROM bar b
> WHERE f.fk = b.pk
> ),
> f2 = (
> SELECT f2
> FROM bar b
> WHERE f.fk = b.pk
> ),
> f3 = (
> SELECT f3
> FROM bar b
> WHERE f.fk = b.pk
> ),
> f4 = (
> SELECT f4
> FROM bar b
> WHERE f.fk = b.pk
> ),
> f5 = (
> SELECT f5
> FROM bar b
> WHERE f.fk = b.pk
> )
> WHERE f.pk IN (
> SELECT l.pk
> FROM keylist l
> );
>
> That seemed to get closer, but still barfed (apparently) because of a
> lack of table aliasing and correlated subqueries. This makes the
> process become an iterative one.
>
> Am I missing something here?

You're not allowed to alias the update target table, so I think you'd need
to remove the f alias and refer to foo anywhere you're currently referring
to f.

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Stephan Szabo 2004-03-10 02:17:04 Re: Converting query to view - duplicate fields
Previous Message Richard Grosse 2004-03-09 22:40:33 Converting query to view - duplicate fields