Re: UPDATE using subquery with joined tables

From: "David Johnston" <polobo(at)yahoo(dot)com>
To: "'Sebastian P(dot) Luque'" <spluque(at)gmail(dot)com>, <pgsql-general(at)postgresql(dot)org>
Subject: Re: UPDATE using subquery with joined tables
Date: 2012-12-04 20:04:17
Message-ID: 002501cdd25a$8b1967c0$a14c3740$@yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


> -----Original Message-----
> From: pgsql-general-owner(at)postgresql(dot)org [mailto:pgsql-general-
> owner(at)postgresql(dot)org] On Behalf Of Sebastian P. Luque
> Sent: Tuesday, December 04, 2012 2:53 PM
> To: pgsql-general(at)postgresql(dot)org
> Subject: [GENERAL] UPDATE using subquery with joined tables
>
> Hi,
>
> I need to update field1 in table1, gathering data from field1 in table2.
> The following SELECT shows the data as it needs to be updated:
>
> SELECT a.field1 || regexp_replace(b.field1, '.*(mypattern)', e'. \\1')
FROM
> table1 a JOIN table2 b USING (id) WHERE a.field1 NOT LIKE '%mypattern%'
> AND b.field1 LIKE '%mypattern%';
>
> I am not sure how to translate this into an UPDATE statement for fiel1 in
> table1 efficiently. Any tips welcome.
>
> Cheers,
>
> --
> Seb

Ignoring the "efficiently" part the general form for a joining update is:

UPDATE table SET field = src.field
FROM (

SELECT id, field FROM ... -- make this query as complex as needed; including
WITH if necessary

) src
WHERE table.id = src.id;

SO <Not Tested>:

UPDATE table1 SET field1 = t2.new_field_1
FROM (

SELECT id --# need to add the linking ID to the
subquery
, a.field1 || regexp_replace(b.field1, '.*(mypattern)', e'. \\1') AS
new_field_1 --# provide an alias for this column
FROM table1 a JOIN table2 b USING (id) WHERE a.field1 NOT LIKE '%mypattern%'
AND b.field1 LIKE '%mypattern%';

) t2
WHERE table1.id = t2.id;

David J.

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Paul Jungwirth 2012-12-04 20:07:02 Re: UPDATE using subquery with joined tables
Previous Message Gavin Flower 2012-12-04 20:00:36 Re: Which is faster: char(14) or varchar(14)