Feedback

Thank you. Your feedback has been sent.

España: Discusiones Datenbanken - Doppelte Datensätze löschen, Foros de discusión, intercambios de ideas, charlas, opiniones

Foro > Datenbanken > Vista de artículos
Dummy User Dummy User


Miembro Premium
Inscripción: 30.01.2008
Aportaciones: 9
Lugar de residencia: Dummydorf


Asunto: Doppelte Datensätze löschen
Redactado el: 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


Responder
Mensaje privado
Roy Leppin


Inscripción: 30.08.2004
Aportaciones: 7
Lugar de residencia: Kassel


Asunto: Re: Doppelte Datensätze löschen
Redactado el: 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

Responder
Mensaje privado
Thomas Bimesmeier
Perfil de Thomas Bimesmeier


Inscripción: 05.07.2005
Aportaciones: 320
Lugar de residencia: Hösbach


Asunto: Re: Doppelte Datensätze löschen
Redactado el: 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.
Responder
Perfil
Mensaje privado
Matthias Metz
Perfil de Matthias Metz


Miembro Premium
Inscripción: 06.07.2009
Aportaciones: 20
Lugar de residencia: Berlin


Asunto: Re: Doppelte Datensätze löschen
Redactado el: 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
>
>

Responder
Perfil
Mensaje privado
Mark Radermacher


Inscripción: 01.07.2009
Aportaciones: 1
Lugar de residencia: Grevenbroich


Asunto: Re: Re: Doppelte Datensätze löschen
Redactado el: 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
> >
> >
>

Responder
Mensaje privado


1

Threads parecidos:


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
Theme related Websites :