Re: Delete with join -- deleting related table entries? - Mailing list pgsql-sql

From Owen Jacobson
Subject Re: Delete with join -- deleting related table entries?
Date
Msg-id 144D12D7DD4EC04F99241498BB4EEDCC20CC8E@nelson.osl.com
Whole thread Raw
In response to Delete with join -- deleting related table entries?  (Bryce Nesbitt <bryce1@obviously.com>)
List pgsql-sql
Bryce Nesbitt wrote:

> Markus Schaber wrote:
>
> > Bryce Nesbitt wrote:
> >
> >
> >> BEGIN;
> >>   DELETE FROM note WHERE issue_id IN (SELECT issue_id FROM isuse
> >>      WHERE reservation_id IN
> >>      (select reservation_id from reservations where date > magic)
> >>      );
> >>   DELETE FROM isuse WHERE reservation_id IN
> >>      (select reservation_id from reservations where date > magic);
> >>   DELETE FROM reservations WHERE reservation_id IN
> >>      (select reservation_id from reservations where date > magic);
> >> COMMIT;
> >>
> >> I suppose I can do the subselect as a perl wrapper, but I
> >> was thinking that maybe SQL could do it all for me....
> >
> > Why do you think this won't work? (provided you add the
> missing ) and ; :-)
>
> Wow.  It worked.  Cool.  I guess the reservations don't get deleted
> until they are not needed any more...
>
> Not the fastest thing in the world.  But it worked.

EXPLAIN works with DELETE too.  Joins in general on unindexed fields can be pretty slow; if you see a lot of Seq Scan
entriesin the EXPLAIN output, you might consider having indexes added on appropriate fields. 

Then again, if you were going to do that, you might as well just fix the schema to use REFERENCES...ON DELETE CASCADE
andbe done with it. :) 

-Owen


pgsql-sql by date:

Previous
From: Bryce Nesbitt
Date:
Subject: Re: Delete with join -- deleting related table entries?
Next
From: Ken Hill
Date:
Subject: Non Matching Records in Two Tables