2010-12-22 20 views
3

nehme an, es ist ein Mitarbeiter Tabellenspalten Name, ID und Gehalt, die 2 oder mehr als zwei Reihen mit gleichen Werten in allen drei Reihen ... dann, wie eine Abfrage schreiben doppelte Zeilen löschen ..SQL-Abfrage, um doppelte Zeilen aus derselben Tabelle zu löschen?

+2

Ist das eine Hausaufgabenfrage? Es würde uns helfen, wenn Sie angeben, welche Datenbank Sie verwenden - da die Syntax abweichen könnte. –

+2

id kann getäuscht werden? –

+1

Neugierig, was ist der Primärschlüssel dieser Tabelle? Da typischerweise die meisten "ID" als Primärschlüssel verwenden. Wenn "ID" der Primärschlüssel ist. Wie haben Sie dann Duplikate? Klingt wie ein Problem mit der Einschränkung für den Primärschlüssel. –

Antwort

8

Here ist eine schöne Art und Weise, wenn Sie 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 
+0

+1 der Kommentar ist für mich die Chance zu erhöhen, den Link wieder zu finden, wenn ich es brauche. –

3

vorausgesetzt ID verwenden ist der Primärschlüssel:

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 Ich habe 2 doppelte Zeilen in Tabelle Schüler:

Name | Nummer | Nachname

Manoj | 1125256 | Sharma

Manoj | 1125256 |

Sharma

Ich möchte eine mit der folgenden Abfrage löschen

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

Dies funktioniert nur, wenn Sie zwei Zeilen haben, nicht, wenn Sie mehr doppelte Datensätze haben. –

0

u eindeutigen Schlüssel zu Ihrem Bereich einstellen können ... sonst können Sie alle doppelte Zeile von

löschen aus löschen Tabellenname wobei ID = @ ID und Name = @ Name

0

Fügen Sie die verschiedenen Zeilen aus der ursprünglichen Tabelle in neue temporäre Tabelle ein. Löschen Sie Daten aus der ursprünglichen doppelten Tabelle und fügen Sie dann die eindeutigen Zeilen aus der temporären Tabelle in die ursprüngliche Tabelle ein.

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