Re: Delete with join -- deleting related table entries?

From: "Owen Jacobson" <ojacobson(at)osl(dot)com>
To: <pgsql-sql(at)postgresql(dot)org>
Cc: "Markus Schaber" <schabi(at)logix-tt(dot)com>
Subject: Re: Delete with join -- deleting related table entries?
Date: 2006-02-08 18:18:46
Message-ID: 144D12D7DD4EC04F99241498BB4EEDCC20CC8E@nelson.osl.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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 entries in 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 and be done with it. :)

-Owen

Browse pgsql-sql by date

  From Date Subject
Next Message Ken Hill 2006-02-08 21:10:23 Non Matching Records in Two Tables
Previous Message Bryce Nesbitt 2006-02-08 18:11:17 Re: Delete with join -- deleting related table entries?