Feedback

Thank you. Your feedback has been sent.

New Zealand: Discussions Datenbanken - Doppelte Datensätze löschen, Discussions, exchange of ideas, controversies, opinions

Forum > Datenbanken > Thread
Dummy User Dummy User


Premium member
Date of registration: 30.01.2008
Postings: 9
City: Dummydorf


Subject: Doppelte Datensätze löschen
Posted on: 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


Reply
Private message
Roy Leppin


Date of registration: 30.08.2004
Postings: 7
City: Kassel


Subject: Re: Doppelte Datensätze löschen
Posted on: 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

Reply
Private message
Thomas Bimesmeier
Profile from Thomas Bimesmeier


Date of registration: 05.07.2005
Postings: 320
City: Hösbach


Subject: Re: Doppelte Datensätze löschen
Posted on: 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.
Reply
View profile
Private message
Matthias Metz
Profile from Matthias Metz


Premium member
Date of registration: 06.07.2009
Postings: 20
City: Berlin


Subject: Re: Doppelte Datensätze löschen
Posted on: 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
>
>

Reply
View profile
Private message
Mark Radermacher


Date of registration: 01.07.2009
Postings: 1
City: Grevenbroich


Subject: Re: Re: Doppelte Datensätze löschen
Posted on: 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
> >
> >
>

Reply
Private message


1

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