2010-12-22 82 views
3

假設有含列名,ID和工資有2個或多於兩排,相同的值在所有三個行的員工表...那麼如何編寫一個查詢來刪除重複行..SQL查詢從同一個表中刪除重複的行?

+2

這是一個功課題嗎?如果您指定了您正在使用的數據庫,它會對我們有所幫助 - 因爲語法可能有所不同。 – 2010-12-22 15:20:31

+2

id可以被騙? – 2010-12-22 15:21:08

+1

好奇,這張桌子的主要關鍵是什麼?由於通常大多數人會使用「ID」作爲主鍵。如果「ID」是主鍵。那你怎麼有重複?聽起來像您的主鍵約束問題。 – 2010-12-22 15:22:32

回答

8

Here是如果你使用一個很好的方式,Sql Server的

with duplicates as 
(select * ,ROW_NUMBER() over(

     partition by id,name, salary 
     order by id,name, salary) rownum 
from Person) 
delete from duplicates where rownum > 1 
3

假設ID是主鍵:

delete P 
from Person P right outer join 
(
    select name, min(id) as id 
    from Person 
    group by name 
) unique_people 
on P.id = unique_people.id 
where P.id is NULL 
-1
DELETE TOP(1) FROM tablename WHERE columemane='name' 

Supposin g我有表2中的2個重複行學生

name |數字|姓氏

Manoj | 1125256 | Sharma

Manoj | 1125256 |夏爾馬

我想

從刪除使用下面的查詢

DELETE TOP(1) FROM student WHERE name='Manoj' 
0

ü可以設置唯一的密鑰對你的領域...... 否則你可以刪除所有重複的行 刪除一個table_name其中id = @ id和name = @名稱

0

將原始表中的不同行插入到新的臨時表中。 從原始副本表中刪除數據,然後將臨時表中的不同行插入原始表中。

select distinct * into temp From Emp; 
delete from Emp; 
insert into Emp(name,ID,salary) as select * from temp; 
drop table temp;