Re: can these queries be combined into one? - Mailing list pgsql-general

From David Johnston
Subject Re: can these queries be combined into one?
Date
Msg-id F1D74363-8252-473A-883F-24AB95B4118D@yahoo.com
Whole thread Raw
In response to Re: can these queries be combined into one?  (Guillaume Lelarge <guillaume@lelarge.info>)
List pgsql-general
On Mar 25, 2012, at 1:50, Guillaume Lelarge <guillaume@lelarge.info> wrote:

> On Sun, 2012-03-25 at 08:41 +0000, hamann.w@t-online.de wrote:
>> Guillaume Lelarge <guillaume@lelarge.info> worte:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I am currently doing something like
>>>>>
>>>>> select ordercode, descr, codes into temp table x from products where ...
>>>>> Here codes is a bit-mapped field
>>>>> update x set codes = codes | 512 from othertable t where ordercode = t.ordercode and ....
>>>>> select * from x
>>>>>
>>>>> Is there a way to avoid that temp table?
>>>>>
>>>>
>>>> Difficult to be really precise, but you may do this with:
>>>>
>>>> UPDATE products
>>>> SET codes = codes | 512
>>>> FROM othertable t
>>>> WHERE
>>>>  <your first-SELECT WHERE clause here>
>>>>  AND ordercode = t.ordercode AND ...
>>>> RETURNING
>>>>  ordercode, descr, codes;
>>>>
>>>> You need at least 8.2 to use the RETURNING clause.
>>>>
>>
>> Hi Guillaume,
>>
>> thanks a lot, but it is not really what I need: I want the whole lot, not just the rows that were part
>> of the update
>>
>
> Oops, you're right. Never answer before having some coffee :)
>
> I guess you don't have much choice then. You'll need that temp table.
>
>

Not seeing the whole original query but you generally omit the where clause and move the condition to a case statement
onthe update.  For records not meeting your criteria you simply update the column with the existing value. 

David J.

pgsql-general by date:

Previous
From: François Beausoleil
Date:
Subject: Re: Streaming replication and empty databases
Next
From: Sergey Konoplev
Date:
Subject: Re: Howto Replication for dummies?