MySQL Forums
Forum List  »  German

Re: Nur einen von den doppelten aber nur der mit....(schwer zu erklähren)
Posted by: Thomas Wiedmann
Date: February 14, 2013 02:08PM

Hallo Thorsten,

wie immer ist es sinnvol ein nachvollziehbares Beispiel mit Testdaten mitzuliefern. Die Löschkriterien muss Du natürlich selber definieren.

Denke ich mir mal folgendes: Eine Tabelle mit vier Datensätzen. Der Datensatz mit der ID = 2 ist doppelt gemäß Name und Vorname. Dieser soll gelöscht werden. Stehen bleibt der doppelten Datensatz mit der niedrigsten ID.

CREATE TABLE doppelte_daten (
  id INT NOT NULL,
  name VARCHAR(50) NOT NULL,
  vorname VARCHAR(50) NOT NULL,  
  
  PRIMARY KEY (id)
);

INSERT INTO doppelte_daten VALUES
( 1, 'Name-1', 'Vorname-1'),
( 2, 'Name-1', 'Vorname-1'),      /* <== doppelter */
( 3, 'Name-2', 'Vorname-2'),
( 4, 'Name-3', 'Vorname-3');


/* Liefert die doppelten Datensätze */
SELECT * FROM doppelte_daten
  WHERE id NOT IN ( SELECT MIN(id) AS min_id
                      FROM doppelte_daten
		     GROUP BY name, vorname );
			      

/* Löscht die doppelten Datensätze */
DELETE FROM doppelte_daten
  WHERE id NOT IN  ( SELECT d2.min_id FROM
  			  ( SELECT MIN(id) AS min_id
   			      FROM doppelte_daten
		             GROUP BY name, vorname 
			  ) as d2
		    );
			     
			
/* Ergebnis nach dem Löschen*/			
mysql> select * from doppelte_daten;
+----+--------+-----------+
| id | name   | vorname   |
+----+--------+-----------+
|  1 | Name-1 | Vorname-1 |
|  3 | Name-2 | Vorname-2 |
|  4 | Name-3 | Vorname-3 |
+----+--------+-----------+
3 rows in set (0.00 sec)

mysql>
Löschen geht immer eigene Gefahr! Also Backup nicht vergessen!

Grüße
Thomas

Options: ReplyQuote




Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.