pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Stephan Szabo <sszabo@megazone23.bigpanda.com>
To: Mindaugas Riauba <mind@bi.lt>
Cc: pgsql-sql@postgresql.org
Subject: Re: SQL syntax
Date: Wed, 31 Jul 2002 08:57:32 -0700 (PDT)
Message-ID: <20020731085358.X17229-100000@megazone23.bigpanda.com> (raw)
In-Reply-To: <06d401c23894$7d9b4c00$f20214ac@B027543>


On Wed, 31 Jul 2002, Mindaugas Riauba wrote:

>
>   I have two similar tables with host and services availability
> data (Nagios). And I want to find out services which are not OK
> in first table and OK in second one. Query I used is:
>
> select c.* from coll_servicestatus as c inner join
> servicestatus as s on (c.service_description=s.service_description
> and c.host_name=s.host_name) where c.service_status != 'OK' and
> s.service_status = 'OK';
>
>   Results are fine. But how to write UPDATE statement if I want
> to set those non-OK states in first table to OK if they are OK
> in the second table?
>
>   Something like:
>
> update coll_servicestatus set service_status = 'OK' from
> coll_servicestatus as c, servicestatus as s where
> c.service_description = s.service_description and c.host_name=s.host_name
> and c.service_status != 'OK' and s.service_status = 'OK';
>
>   updates all rows not only required ones.

There are two joins on coll_servicestatus in the above, the one in the
from and one with the updating table.  You could probably remove the
coll_servicestatus as c, and change references to c to coll_servicestatus
or use a subselect, something like:

update coll_servicestatus set service_status='OK' where
service_status!='OK' and exists (select * from servicestatus as s where
coll_servicestatus.service_description=s.service_description and
coll_servicestatus.host_name=s.host_name and s.service_status='OK');




view thread (11+ messages)  latest in thread

Message-ID: <20020731085358.X17229-100000@megazone23.bigpanda.com>
Permalink:  ../20020731085358.X17229-100000@megazone23.bigpanda.com/
Also on:    postgresql.org/message-id/20020731085358.X17229-100000@megazone23.bigpanda.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: sszabo@megazone23.bigpanda.com, mind@bi.lt
  Subject: Re: SQL syntax
  In-Reply-To: <20020731085358.X17229-100000@megazone23.bigpanda.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox