Re: sql to delete rows from joining a table to itself
From: Jeff Calico <jeffcalico_at_gmail.com>
Date: Tue, 30 Jun 2009 07:42:02 -0700 (PDT)
Message-ID: <9fcbd76f-b248-4418-83ba-2e02971ea43b_at_z34g2000vbl.googlegroups.com>
On Jun 30, 8:26 am, Mark D Powell <Mark.Pow..._at_eds.com> wrote:
> On Jun 29, 12:41 pm, Jeff Calico <jeffcal..._at_gmail.com> wrote:
>
>
>
> > On Jun 29, 7:03 am, Ed Prochak <edproc..._at_gmail.com> wrote:
>
> > > On Jun 28, 7:51 pm, Jeff Calico <jeffcal..._at_gmail.com> wrote:
>
> > > > Hello everyone
>
> > > > I am trying to delete rows from a massive data table that are "almost"
> > > > duplicates. I can do a nice query
> > > > to find them when I join the table with itself, but I can't figure out
> > > > how to form a delete statement out
> > > > of this.
>
> > > > Query:
>
> > > > SELECT a.*
> > > > FROM Trafficdata a, Trafficdata b
> > > > WHERE a.id = b.id
> > > > AND a.date = b.date
> > > > AND a.flag = 'Q'
> > > > AND b.flag = 'Q'
> > > > AND a.dstop = b.dstop
> > > > AND (a.batch != b.batch OR (a.batch = b.batch AND a.pos_marker <
> > > > b.pos_marker) );
>
> > > > One idea I tried after searching the web was
> > > > DELETE FROM ( <above query> ); but that gives
> > > > ORA-01752 "Cannot delete from view without exactly one key preserved
> > > > table"
>
> > > > Any help would be greatly appreciated!
> > > > Jeff C.
>
> > > Do you have a primary key on this Trafficdata table?
> > > Assuming your results are the rows your really want to delete then a
> > > delete of the form:
>
> > > DELETE FROM Trafficdata WHERE pk IN (SELECT a.pk from ...) ;
>
> > > I suggest you do this AFTER doing a backup.
>
> > > Ed
>
> > Thanks for your reply. No, there isn't don't have a primary key on
> > this data table. I also can't make a backup of the TrafficData table,
> > due to its huge size, but I did make a smaller table to experiment on.
>
> > Jeff- Hide quoted text -
>
> > - Show quoted text -
>
> The code I post will work when no PK or UK exists. The key_list is
> just the list of columns that qualify the data to be considered
> duplicate. If could be one column or all the columns in the row.
>
> HTH -- Mark D Powell --
Date: Tue, 30 Jun 2009 07:42:02 -0700 (PDT)
Message-ID: <9fcbd76f-b248-4418-83ba-2e02971ea43b_at_z34g2000vbl.googlegroups.com>
On Jun 30, 8:26 am, Mark D Powell <Mark.Pow..._at_eds.com> wrote:
> On Jun 29, 12:41 pm, Jeff Calico <jeffcal..._at_gmail.com> wrote:
>
>
>
> > On Jun 29, 7:03 am, Ed Prochak <edproc..._at_gmail.com> wrote:
>
> > > On Jun 28, 7:51 pm, Jeff Calico <jeffcal..._at_gmail.com> wrote:
>
> > > > Hello everyone
>
> > > > I am trying to delete rows from a massive data table that are "almost"
> > > > duplicates. I can do a nice query
> > > > to find them when I join the table with itself, but I can't figure out
> > > > how to form a delete statement out
> > > > of this.
>
> > > > Query:
>
> > > > SELECT a.*
> > > > FROM Trafficdata a, Trafficdata b
> > > > WHERE a.id = b.id
> > > > AND a.date = b.date
> > > > AND a.flag = 'Q'
> > > > AND b.flag = 'Q'
> > > > AND a.dstop = b.dstop
> > > > AND (a.batch != b.batch OR (a.batch = b.batch AND a.pos_marker <
> > > > b.pos_marker) );
>
> > > > One idea I tried after searching the web was
> > > > DELETE FROM ( <above query> ); but that gives
> > > > ORA-01752 "Cannot delete from view without exactly one key preserved
> > > > table"
>
> > > > Any help would be greatly appreciated!
> > > > Jeff C.
>
> > > Do you have a primary key on this Trafficdata table?
> > > Assuming your results are the rows your really want to delete then a
> > > delete of the form:
>
> > > DELETE FROM Trafficdata WHERE pk IN (SELECT a.pk from ...) ;
>
> > > I suggest you do this AFTER doing a backup.
>
> > > Ed
>
> > Thanks for your reply. No, there isn't don't have a primary key on
> > this data table. I also can't make a backup of the TrafficData table,
> > due to its huge size, but I did make a smaller table to experiment on.
>
> > Jeff- Hide quoted text -
>
> > - Show quoted text -
>
> The code I post will work when no PK or UK exists. The key_list is
> just the list of columns that qualify the data to be considered
> duplicate. If could be one column or all the columns in the row.
>
> HTH -- Mark D Powell --
Thanks, Mark. I was wondering about exactly that. I'll have another go at it today.
--Jeff Received on Tue Jun 30 2009 - 09:42:02 CDT