Alle Datensätze die Duplikate enthalten löschen nur nicht Duplikate sollen übrig bleiben

MitchAndi

Benutzer
Beiträge
6
Hallo, ich möchte alle Datensätze angezeigt bekommen, die keine Duplikate enthalten.
Wenn ich "select distinct" verwende zeigt es mir nur die doppelten Datensätze nicht mehr an.
Das ist aber nicht meine Absicht, ich möchte die doppelten Datensätze komplett löschen und nur diejenigen sollen übrig bleiben, welche nur 1mal vorhanden sind.

D.h. wenn Max Mustermann 2mal oder öfters vorkommt dann sollen alle Max Mustermanns gelöscht werden.
Kommt Max Mustermann nur 1mal in der Datenbank vor, dann soll er nicht gelöscht werden.

Ich nutze SQL-Management Studio und MS-Access mir ist es schleierhaft wie dies zu realisieren ist.
Die Tabelle enthält die Spalten Name, E-Mail und Anrede. Es kann sein, dass Name und E-Mail gleich sind und Anrede das einzige Unterscheidungsmerkmal ist.

Hatte jemand von Euch schon eine ähnliche Anforderung?
 
Werbung:
Moin moin,

mal wieder in das blaue geschossen und ohne Gewähr :)
So könnte es vllt. aussehen....

Code:
BEGIN TRANSACTION

CREATE TABLE bla (
id int not null,
name varchar(20) not null,
mail varchar(75) null
)

INSERT INTO bla
VALUES(1,'name1', 'name1@bla.de'),(1,'name1', 'name1@bla.de'),(2,'name2', 'name2@bla.de'),(3,'name3', 'name3@bla.de'),(4,'name4', 'name4@bla.de')

select *
from bla

select id,name, mail
from(
select row_number() over(partition by name order by id) as nr, id,name,mail
from bla) ausgabe
where ausgabe.nr > 1

truncate table bla

ROLLBACK TRANSACTION
 
Du suchst HAVING:

Code:
test=*# select * from namen ;
 vorname |  nachname  
---------+------------
 Max  | Mustermann
 Susi  | Sorglos
 Susi  | Sorglos
 Donald  | Duck
 Donald  | Duck
 Donald  | Duck
(6 Zeilen)

test=*# select vorname, nachname, count(1) from namen group by vorname, nachname having count(1) = 1;
 vorname |  nachname  | count
---------+------------+-------
 Max  | Mustermann |  1
(1 Zeile)

test=*#
 
Werbung:
Zurück
Oben