2010-08-13 61 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); 
相關問題