Re: Heres a good one... - Mailing list pgsql-sql

From Anuradha Ratnaweera
Subject Re: Heres a good one...
Date
Msg-id Pine.LNX.4.21.0104281903360.233-100000@presario
Whole thread Raw
In response to Heres a good one...  (Steve Meynell <steve@candata.com>)
List pgsql-sql
First, posting_date in journal can _NOT_ be of type char(4)! I guess it is
a "date".

Try

update journal set gl_update_flag='Y' from distrib where
journal.gl_update_flag = 'H' and journal.posting_date <= '2001-03-31' and
(journal.objectid = distrib.distrib_objectid or journal.objectid =
distrib.source_objectid)

or

update journal set gl_update_flag='Y' where gl_update_flag = 'H' and
posting_date <= '2001-03-31' and ((objectid in select distrib_objectid
from distrib) or (objectid in select source_objectid from distrib))

On Fri, 27 Apr 2001, Steve Meynell wrote:

> Ok here is what looks like a good one that has stumped me.
> 
> Let me set it up... I have two tables in my database test.  They are
> called journal and distrib.
> 
> journal looks like this (condensed)
> 
>            Table "journal"
>    Attribute          |  Type      | Modifier
> ----------------+---------+----------
>  objectid               | integer   |
>  posting_date      | char(4)  |
>  gl_update_flag   | char(1)  |
> 
> And distrib look like this (condensed)
> 
>             Table "distrib"
>     Attribute           |  Type     | Modifier
> ------------------+---------+----------
>  objectid                 | integer  |
>  distrib_objectid   | integer  |
>  source_objectid   | integer  |
> 
> The dataset for each is as follows
> 
> journal:
> test=# select * from journal;
>  objectid | posting_date | gl_update_flag
> ----------+--------------+----------------
>       100    | March 31       | H
>       101    | March 31       | H
>       102    | April 02         | Y
>       103    | April 02         | H
>       104    | March 14       | H
>       105    | February 01  | H
>       106    | February 01  | H
> (7 rows)
> 
> distrib:
> test=# select * from distrib;
>  objectid | distrib_objectid | source_objectid
> ----------+------------------+-----------------
>         1      |                        103 |             100
>         2      |                        104 |             100
>         3      |                        101 |             102
>         4      |                        101 |             105
> (4 rows)
> 
> Now the trick here is...
> 
> I want to update the gl_update_flag in journal to Y all of the records
> where the gl_update_flag is H now and the posting date is before or on
> March 31 and where the objectid from journal matches either the
> distrib_objectid or the source_objectid from the distrib table we need
> to also update the opposite journal entry to Y as well.  And can this be
> done in one command?
> 
> An example from the above data set would be  Journal objectid 100 would
> change and so would 103 and 104.
> And Journal objectid 101 would update 101 and 102 and 105.
> And Journal objectid 106 would only update 106.
> 
> Any Ideas?
> 
> Thanks in Advance,
> Steve
> 
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
> 
> http://www.postgresql.org/search.mpl
> 



pgsql-sql by date:

Previous
From: Anuradha Ratnaweera
Date:
Subject: order of multiple assignments in UPDATE
Next
From: Peter Mount
Date:
Subject: Re: HELP : Can't load JDBC driver !