1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

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

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MitchAndi, 18 Dezember 2017.

  1. MitchAndi

    MitchAndi Neuer Benutzer

    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?
     
  2. Chuky666

    Chuky666 Fleissiger Benutzer

    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
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  4. Chuky666

    Chuky666 Fleissiger Benutzer

    @akretschmer : natürlich bin ich nicht auf das einfachste gekommen mit count + having :D
     
    akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen