Ankündigung

Einklappen
Keine Ankündigung bisher.

Doppelte Datensätze löschen (2 Spalten prüfen)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Doppelte Datensätze löschen (2 Spalten prüfen)

    Hallo zusammen,

    ich habe eine Tabelle:

    Code:
    CREATE TABLE `auftrag_objekte` (
      `ID` int(11) NOT NULL,
      `auftragID` int(11) NOT NULL,
      `objektID` int(11) NOT NULL,
      `status` smallint(6) DEFAULT NULL COMMENT '0 = Nein 1 = Ja'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    möchte möchte ausgeschrieben folgendes:

    Lösche alle Datensätze, wo es mehr als einen Datensatzgibt wo auftragID und objektID in der Kombination mehrfach vorkommt. Hier müssten z. B. ID 17 + 18 gelöscht werden.

    Code:
    INSERT INTO `auftrag_objekte` (`ID`, `auftragID`, `objektID`, `status`) VALUES
    (17, 2, 19, NULL),
    (18, 2, 19, NULL),
    (19, 2, 19, NULL);
    (20, 5, 19, NULL);
    (21, 6, 19, NULL);
    COMMIT;
    Ich schaffe es einfach nicht. Probiere und Probiere...

    Mein Ansatz war folgender:

    Code:
    SELECT
    tab1.ID,
    tab1.auftragID,
    tab1.objektID,
    tab2.ID,
    tab2.auftragID,
    tab2.objektID
    FROM auftrag_objekte tab1, auftrag_objekte  tab2
    WHERE tab1.auftragID = tab2.auftragID
    AND tab1.objektID = tab2.objektID
    AND tab1.ID <> tab2.ID

  • #2
    Auf die Schnelle:
    Code:
    delete from auftrag_objekte where ID not in (
        select MaxID from (
            select max(ID) MaxID, auftragID, objektID
            from auftrag_objekte
            group by auftragID, objektID
        ) t
    )
    die Frage ist jedoch, warum es überhaupt zu doppelten kommen kann?
    Du kannst einen PK übrigens auch über mehrere Spalten definieren.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Viiielen Dank. Krss wie optiniert es manchmal sein kann. Danke nochmal!

      Kommentar


      • #4
        Ein PK über die 3 ersten Spalten würde dies nicht verhindern , aber ein UNIQUE über die 2. und dritte Spalte.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von akretschmer Beitrag anzeigen
          Ein PK über die 3 ersten Spalten würde dies nicht verhindern , aber ein UNIQUE über die 2. und dritte Spalte.
          2. und 3. war auch gemeint, von der ersten habe ich nichts gesagt. Aber PK war falsch, da hast Du recht, Du Schlaumeier
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar

          Lädt...
          X