2010-08-13 135 views
4

比方说,我有一个表,看起来是这样的:如何删除行如果前面有具体列中的值相同

------------------------------- 
id|column2|column3 |column4 
------------------------------- 
1 value1 somevalue somevalue 
2 value2 somevalue somevalue 
3 value2 somevalue somevalue <----- I want this column deleted 
4 value3 somevalue somevalue 

正如你可以看到我想要删除的行,其中当前并且前一行在第2列中具有相同的值。

回答

4

我会尝试像

DELETE FROM Table t1 
WHERE EXISTS (SELECT 1 from Table t2 
       WHERE t1.Column2 = t2.Column2 
       AND t2.Id + 1 = t1.Id) 

对于您的具体问题,我会使用t2.Id + 1 = t1.Id代替t2.Id < t1.Id作为这将删除任何发生,而不是连续的条目。

1
DELETE FROM Table t1 
WHERE EXISTS (SELECT 1 from Table t2 
       WHERE t1.Column2 = t2.Column2 
       AND t1.Column3 = t2.Column3     
       AND t1.Column4 = t2.Column4 
       AND t2.Id > t1.Id) 

,或者如果你只需要通过一个字段比较行

DELETE FROM Table t1 
WHERE EXISTS (SELECT 1 from Table t2 
       WHERE t1.Column2 = t2.Column2 
       AND t2.Id > t1.Id) 
0
delete from table_name where rowid in(
select a.rowid 
from (
     select rowid, 
      row_number() over (partition by column_name_having_duplicates order by     column_name_having_duplicates)rnk 
from table_name a 
)a 
where a.rnk>1); 
相关问题