Feedback

Vielen Dank. Ihr Feedback wurde verschickt.

Schweiz: Diskussionen Datenbanken - Doppelte Datensätze löschen, Diskussions-Foren, Gedankenaustausch, Kontroversen, Meinungen

Forum > Datenbanken > Artikelansicht
Dummy User Dummy User


Premium-Mitglied
Anmeldung: 30.01.2008
Beiträge: 9
Wohnort: Dummydorf


Betreff: Doppelte Datensätze löschen
Verfasst am: 01.01.1970 01:33

Hallo,

ich habe ein kleines MySQL Problem, und hoffe,
daß ihr mir ein paar Tipps geben könnt.

Es existiert folgende Beispieltabelle:

create table daten (
id integer not null default '0' auto_increment,
titel varchar(80),
primary key(id)
);

Diese Tabelle enthält nun z.B. 10000 Datensätze wobei
der Titel leider teilweise doppelt ist:

select titel, count(id)
from daten
group by titel
having count(titel)>1
limit 10;

titel 1 | 5
titel 2 | 7
titel 3 | 4
titel 4 | 3

usw...

Ich suche nun nach einer einfachen Möglichkeit, alle doppelten
Datensätze zu entfernen. Daß wäre ja nun nicht weiter schwierig.
Jetzt möchte ich aber von jedem Doppelten Datensatz den ersten
behalten.

Es gibt "titel 4" z.B. 3 mal:
id | titel
4 | titel 4
5 | titel 4
6 | titel 4

Ich brauche nun einen Delete der mir die Datensätze 5 und 6 löscht
und 4 übrig läßt.

Hat jemand einen Tipp für mich?

Gruß,
Nico


Antworten
Priv. Nachricht
Roy Leppin


Anmeldung: 30.08.2004
Beiträge: 7
Wohnort: Kassel


Betreff: Re: Doppelte Datensätze löschen
Verfasst am: 01.01.1970 01:33

> select titel, count(id)
> from daten
> group by titel
> having count(titel)>1
> limit 10;

Selektier doch einfach überall die min(id) in
eine Temp-Tabelle und lösche dann die Datensätze
zu denen in der Temp-Tabelle ein Eintrag existiert.

Das wiederholst Du so oft bis dein Select nix mehr
findet.

Roy

Antworten
Priv. Nachricht
Thomas Bimesmeier
Profil von Thomas Bimesmeier


Anmeldung: 05.07.2005
Beiträge: 320
Wohnort: Hösbach


Betreff: Re: Doppelte Datensätze löschen
Verfasst am: 11.07.2005 11:43

schrieb am 01.01.1970 um 01:33:
> Hallo,
>
> ich habe ein kleines MySQL Problem, und hoffe,
> daß ihr mir ein paar Tipps geben könnt.
>
> Es existiert folgende Beispieltabelle:
>
> create table daten (
> id integer not null default '0' auto_increment,
> titel varchar(80),
> primary key(id)
> );
>
> Diese Tabelle enthält nun z.B. 10000 Datensätze wobei
> der Titel leider teilweise doppelt ist:
>
> select titel, count(id)
> from daten
> group by titel
> having count(titel)>1
> limit 10;
>
> titel 1 | 5
> titel 2 | 7
> titel 3 | 4
> titel 4 | 3
>
> usw...
>
> Ich suche nun nach einer einfachen Möglichkeit, alle doppelten
> Datensätze zu entfernen. Daß wäre ja nun nicht weiter schwierig.
> Jetzt möchte ich aber von jedem Doppelten Datensatz den ersten
> behalten.
>
> Es gibt "titel 4" z.B. 3 mal:
> id | titel
> 4 | titel 4
> 5 | titel 4
> 6 | titel 4
>
> Ich brauche nun einen Delete der mir die Datensätze 5 und 6 löscht
> und 4 übrig läßt.
>
> Hat jemand einen Tipp für mich?
>
> Gruß,
> Nico
>
>

Eine Möglichkeit von mehreren:
- Hilfstabelle mit identischem Aufbau erstellen
- Originaltabelle für andere sperren
- mit (SELECT DISTINCT * FROM daten ORDER BY id) den Gulasch holen und mittels INSERT INTO in die Hilfstabelle blasen.
- Originaltabellinhalt löschen
- Daten aus der Hilfstabelle in die Originaltabelle kopieren
- Originaltabelle entsperren
- Hilftabelle löschen

Diese Methode geht extrem schnell und ist sicher im laufenden Betrieb.
Antworten
Profil
Priv. Nachricht
Matthias Metz
Profil von Matthias Metz


Premium-Mitglied
Anmeldung: 06.07.2009
Beiträge: 20
Wohnort: Berlin


Betreff: Re: Doppelte Datensätze löschen
Verfasst am: 07.07.2009 09:40

... vielleicht kannst Du mit der Bedingung COUNT < 2 arbeiten.



Dummy User Dummy User schrieb am 01.01.1970 um 01:33:
> Hallo,
>
> ich habe ein kleines MySQL Problem, und hoffe,
> daß ihr mir ein paar Tipps geben könnt.
>
> Es existiert folgende Beispieltabelle:
>
> create table daten (
> id integer not null default '0' auto_increment,
> titel varchar(80),
> primary key(id)
> );
>
> Diese Tabelle enthält nun z.B. 10000 Datensätze wobei
> der Titel leider teilweise doppelt ist:
>
> select titel, count(id)
> from daten
> group by titel
> having count(titel)>1
> limit 10;
>
> titel 1 | 5
> titel 2 | 7
> titel 3 | 4
> titel 4 | 3
>
> usw...
>
> Ich suche nun nach einer einfachen Möglichkeit, alle doppelten
> Datensätze zu entfernen. Daß wäre ja nun nicht weiter schwierig.
> Jetzt möchte ich aber von jedem Doppelten Datensatz den ersten
> behalten.
>
> Es gibt "titel 4" z.B. 3 mal:
> id | titel
> 4 | titel 4
> 5 | titel 4
> 6 | titel 4
>
> Ich brauche nun einen Delete der mir die Datensätze 5 und 6 löscht
> und 4 übrig läßt.
>
> Hat jemand einen Tipp für mich?
>
> Gruß,
> Nico
>
>

Antworten
Profil
Priv. Nachricht
Mark Radermacher


Anmeldung: 01.07.2009
Beiträge: 1
Wohnort: Grevenbroich


Betreff: Re: Re: Doppelte Datensätze löschen
Verfasst am: 07.07.2009 12:31

Hallo,

ich kenn MySql nicht so gut, aber unter Oracle würde ich folgenden DELETE-Befehl absetzen :

DELETE daten a
WHERE EXISTS
(SELECT *
FROM daten
WHERE titel = a.titel
AND id > a.id);

Sollte eigentlich klappen, da dies ein Standard SQL-Statement ist.

Gruß,

Mark


> > create table daten (
> > id integer not null default '0' auto_increment,
> > titel varchar(80),
> > primary key(id)

Matthias Metz schrieb am 07.07.2009 um 09:40:
> ... vielleicht kannst Du mit der Bedingung COUNT < 2 arbeiten.
>
>
>
> Dummy User Dummy User schrieb am 01.01.1970 um 01:33:
> > Hallo,
> >
> > ich habe ein kleines MySQL Problem, und hoffe,
> > daß ihr mir ein paar Tipps geben könnt.
> >
> > Es existiert folgende Beispieltabelle:
> >
> > create table daten (
> > id integer not null default '0' auto_increment,
> > titel varchar(80),
> > primary key(id)
> > );
> >
> > Diese Tabelle enthält nun z.B. 10000 Datensätze wobei
> > der Titel leider teilweise doppelt ist:
> >
> > select titel, count(id)
> > from daten
> > group by titel
> > having count(titel)>1
> > limit 10;
> >
> > titel 1 | 5
> > titel 2 | 7
> > titel 3 | 4
> > titel 4 | 3
> >
> > usw...
> >
> > Ich suche nun nach einer einfachen Möglichkeit, alle doppelten
> > Datensätze zu entfernen. Daß wäre ja nun nicht weiter schwierig.
> > Jetzt möchte ich aber von jedem Doppelten Datensatz den ersten
> > behalten.
> >
> > Es gibt "titel 4" z.B. 3 mal:
> > id | titel
> > 4 | titel 4
> > 5 | titel 4
> > 6 | titel 4
> >
> > Ich brauche nun einen Delete der mir die Datensätze 5 und 6 löscht
> > und 4 übrig läßt.
> >
> > Hat jemand einen Tipp für mich?
> >
> > Gruß,
> > Nico
> >
> >
>

Antworten
Priv. Nachricht


1

Weitere ähnliche Threads:


freelancermap footer border
Deutschland | Österreich | Schweiz | United Kingdom | USA | Russian Federation | España | Italy | Ukraine | Liechtenstein | Hungary | New Zealand | France | Slovakia | India | United Arab Emirates
Themenrelevante Websites :