SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
Search:  
 
 
        
Home       Members    Calendar    Who's On



delete query Expand / Collapse
Author
Message
Posted Friday, July 03, 2009 3:47 AM
SSC Veteran

SSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC Veteran

Group: General Forum Members
Last Login: 2 days ago @ 5:49 AM
Points: 202, Visits: 259
create table temp(id int,path varchar)
insert into temp(1,'C:\my\')
insert into temp(2,'C:\my\')
insert into temp(3,'C:\my\')
insert into temp(4,'C:\my\')
insert into temp(5,'C:\my\')

I want to delete all records where path ='C:\my\'

but want to keep any of one record from this.
Post #746899
Posted Friday, July 03, 2009 3:52 AM
SSChasing Mays

SSChasing MaysSSChasing MaysSSChasing MaysSSChasing MaysSSChasing MaysSSChasing MaysSSChasing MaysSSChasing Mays

Group: General Forum Members
Last Login: Today @ 7:35 AM
Points: 646, Visits: 1,876
Just to clarify , do you want to delete all but one of these rows ?



Slow System ? Go Click First
http://www.simple-talk.com/sql/performance/finding-the-causes-of-poor-performance-in-sql-server,-part-1
then
http://www.simple-talk.com/sql/performance/finding-the-causes-of-poor-performance-in-sql-server,-part-2
to find the cause.

Slow Query ? Go Click
http://www.sqlservercentral.com/articles/SQLServerCentral/66909/
for details of how to post.

My Blog http://sqlblogcasts.com/blogs/sqlandthelike/
Post #746902
Posted Friday, July 03, 2009 3:56 AM
Old Hand

Old HandOld HandOld HandOld HandOld HandOld HandOld HandOld Hand

Group: General Forum Members
Last Login: Friday, September 25, 2009 6:30 AM
Points: 386, Visits: 63
Try this,
This will delete all records where path ='C:\my\'
delete temp where path ='C:\my\' and id <> (select min(id) from temp where path ='C:\my\' )
Post #746903
Posted Friday, July 03, 2009 3:57 AM
SSChasing Mays

SSChasing MaysSSChasing MaysSSChasing MaysSSChasing MaysSSChasing MaysSSChasing MaysSSChasing MaysSSChasing Mays

Group: General Forum Members
Last Login: Today @ 7:35 AM
Points: 646, Visits: 1,876
If 2005 +
create table temp(id int,path varchar(1024))
go
insert into temp values(1,'C:\my\')
insert into temp values(2,'C:\my\')
insert into temp values(3,'C:\my\')
insert into temp values(4,'C:\my\')
insert into temp values(5,'C:\my\')
go

with cteRow(id,path,Rownum)
as
(
Select id,path,row_number() over(partition by path order by id)
from temp
)
delete from cteRow
where Path = 'C:\my\'
and Rownum <> 1
select * from temp





Slow System ? Go Click First
http://www.simple-talk.com/sql/performance/finding-the-causes-of-poor-performance-in-sql-server,-part-1
then
http://www.simple-talk.com/sql/performance/finding-the-causes-of-poor-performance-in-sql-server,-part-2
to find the cause.

Slow Query ? Go Click
http://www.sqlservercentral.com/articles/SQLServerCentral/66909/
for details of how to post.

My Blog http://sqlblogcasts.com/blogs/sqlandthelike/
Post #746904
Posted Friday, July 03, 2009 5:11 AM


SSC Veteran

SSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC Veteran

Group: General Forum Members
Last Login: Monday, July 06, 2009 5:37 AM
Points: 253, Visits: 23
Hope this query may help you

DELETE TOP (SELECT COUNT(*)-1 FROM temp WHERE path='C:\my\' ) FROM temp
Post #746926
Posted Friday, July 03, 2009 6:26 AM
SSC-Enthusiastic

SSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-EnthusiasticSSC-Enthusiastic

Group: General Forum Members
Last Login: Tuesday, October 13, 2009 8:13 AM
Points: 193, Visits: 39
Maybe it could be usefull to do a select distinct into a new separate table.
Then you could use 'truncate table' and actually rename to the new table to the old one.

But otherwise i'll go for the row_number approach.

Greets.
Post #746959
Posted Friday, July 03, 2009 6:39 AM


Ten Centuries

Ten CenturiesTen CenturiesTen CenturiesTen CenturiesTen CenturiesTen CenturiesTen CenturiesTen Centuries

Group: General Forum Members
Last Login: Today @ 9:32 AM
Points: 1,020, Visits: 1,827
nidhisharma01 (7/3/2009)
Hope this query may help you

DELETE TOP (SELECT COUNT(*)-1 FROM temp WHERE path='C:\my\' ) FROM temp


No... that will just delete the first n rows, regardless of the path.
DELETE TOP (SELECT COUNT(*)-1 FROM temp WHERE path='C:\my\' ) FROM temp WHERE path='C:\my\'




Post #746967
Posted Friday, July 03, 2009 6:43 AM


SSC Veteran

SSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC Veteran

Group: General Forum Members
Last Login: Monday, July 06, 2009 5:37 AM
Points: 253, Visits: 23
my mistake,
you are right!

I forgot to add where clause in the main query. This fix would serve the purpose.


Thanks!
Post #746970
Posted Saturday, July 04, 2009 12:00 AM
SSC Veteran

SSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC VeteranSSC Veteran

Group: General Forum Members
Last Login: 2 days ago @ 5:49 AM
Points: 202, Visits: 259
Thanks All,


It works
Post #747153
Posted Saturday, July 04, 2009 12:10 AM


SSCrazy

SSCrazySSCrazySSCrazySSCrazySSCrazySSCrazySSCrazySSCrazy

Group: General Forum Members
Last Login: Wednesday, November 04, 2009 10:18 PM
Points: 2,083, Visits: 2,304
DELETE f
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY Path ORDER BY ID) AS recID
FROM Table1
) AS f
WHERE recID > 1



N 56°04'39.16"
E 12°55'05.25"
Post #747155
« Prev Topic | Next Topic »


Permissions Expand / Collapse