Announcement

Collapse
No announcement yet.

Dopplete Einträge löschen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dopplete Einträge löschen

    Hallo,
    habe folgende Tabelle:
    Id | Name
    1 Max
    2 Hans
    3 Max
    4 Max
    5 Michael
    6 Hans
    7 Michael

    Jetzt würde ich gerne die doppelten Einträge löschen und zwar in dem ich die Zeile beibehalte mit der kleinste Id. Also aus der oberen Tabelle würde dann so was entstehen:
    Id | Name
    1 Max
    2 Hans
    3 Michael

    Danke für jede Hilfe!
    MfG smilebey

  • #2
    Hallo, versuche es mal so :

    CREATE TABLE TEST
    (ID NUMBER,
    NAME VARCHAR2(20))
    /

    INSERT INTO test
    VALUES
    (1,'hans')
    /
    INSERT INTO test
    VALUES
    (2,'hans')
    /
    INSERT INTO test
    VALUES
    (3,'hans')
    /
    INSERT INTO test
    VALUES
    (4,'peter')
    /
    INSERT INTO test
    VALUES
    (5,'urs')
    /
    INSERT INTO test
    VALUES
    (6,'urs')
    /
    COMMIT;

    SELECT *
    FROM TEST t
    WHERE ROWID IN (
    SELECT rid
    FROM (SELECT ROWID rid,
    ROW_NUMBER () OVER (PARTITION BY NAME ORDER BY ROWID)
    rn
    FROM TEST)
    WHERE rn <> 1)
    /

    - Dies selektiert die doppelten Datensätze (sicherheitshalber :-). Wenn du löschen willst, einfach das select * mit einem DELETE ersetzten



    Gruss

    Comment


    • #3
      Irgendwie klappt das nicht.
      Ich habe MS SQL Server Management Studio.
      Meldet einen Syntaxfehler.

      Comment


      • #4
        ok, sorry, dies ist für Oracle (Wäre gut, wenn alle jeweils die DB Version angeben würden...). Bei MSSQL habe ich keine Ahnung, ich habe nicht mal ein Betriebssystem, auf dem er laufen würde :-))

        Comment


        • #5
          Hallo smilebey,

          dein gewünschtes Ergebnis:

          Id | Name
          1 Max
          2 Hans
          3 Michael

          wirst du kaum mit einem SQL-Statement erreichen können, da es keinen DS mit Id=3 und Name='Michael' gibt, müßtest du nach der Löschung zusätzlich noch eine Renumerierung der Id machen!
          Die kleinste Id für Michael ist 5!

          Das Ergebnis:
          Id | Name
          1 Max
          2 Hans
          5 Michael

          erreichst du dann einfach mit:
          Code:
          DELETE FROM test ot
          WHERE ot.Id >
            (SELECT MIN(it.Id) FROM test it WHERE it.Name = ot.Name)
          Gruß Falk

          P.S.: @Ulrich: Das funktioniert übrigens auch mit ORACLE (sieht aber nicht so kompliziert aus)
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Ehrlich gesagt brauch ich ja auch nur das mit der id 5. Hab mich bei der Fragestellung geirrt. Folglich meines ersten Themas. (Schreibt man das so?)

            Comment


            • #7
              P.S.: @Ulrich: Das funktioniert übrigens auch mit ORACLE (sieht aber nicht so kompliziert aus) [/QUOTE]

              :-) Stimmt, je nachdem ist aber unter Oracle die Lösung über die Rowid und der Analytics schneller....aber eben, jenachdem ...

              Comment

              Working...
              X