Dupletten entfernen

Dupletten entfernen

am 21.07.2006 09:06:54 von Thomas Dartsch

Hallo,

in einer Tabelle gibt es diverse doppelte Einträge, die ich wieder
bereinigen möchte. (also ein der beiden Duppleten löschen)

Beispiel:

id 1
A foo
B bar1

id 2
A blub
B bla

id 3
A foo
B bar2

Ich suche nun nach einem SQL-Befehl, der die Doppelung von A=foo erkennt und
einen Datensatz davon entfernt.
Ich hatte schon an eine temp. Tabelle zum Vergleich gedacht. Aber mir fehlen
die Ideen dazu.

danke für eure Tipps.

t.d

Re: Dupletten entfernen

am 21.07.2006 09:17:37 von Johannes Vogel

Hi Thomas

Thomas Dartsch wrote:
> in einer Tabelle gibt es diverse doppelte Einträge, die ich wieder
> bereinigen möchte. (also ein der beiden Duppleten löschen)
> Beispiel:
> id 1
> A foo
> B bar1
> id 2
> A blub
> B bla
> id 3
> A foo
> B bar2
> Ich suche nun nach einem SQL-Befehl, der die Doppelung von A=foo erkennt und
> einen Datensatz davon entfernt.
> Ich hatte schon an eine temp. Tabelle zum Vergleich gedacht. Aber mir fehlen
> die Ideen dazu.

select a.id from Tabelle a join Tabelle b where a.A=b.A and a.B=b.B
where a.id < b.id;

Diese dann in einem zweiten Schritt zu löschen, sollte wohl kein Problem
sein. In einem geht's IMHO nicht, weil delete kein select in der
gleichen Tabelle zulässt.

HTH, Johannes

Re: Dupletten entfernen

am 21.07.2006 09:18:31 von Christian Kirsch

Thomas Dartsch schrieb:
> Hallo,
>
> in einer Tabelle gibt es diverse doppelte Einträge, die ich wieder
> bereinigen möchte. (also ein der beiden Duppleten löschen)
>
> Beispiel:
>
> id 1
> A foo
> B bar1
>
> id 2
> A blub
> B bla
>
> id 3
> A foo
> B bar2
>
> Ich suche nun nach einem SQL-Befehl, der die Doppelung von A=foo erkennt und
> einen Datensatz davon entfernt.
> Ich hatte schon an eine temp. Tabelle zum Vergleich gedacht. Aber mir fehlen
> die Ideen dazu.
>

Etwas in der Art? (disclaimer: Ungetestet und ohne Lektüre des Handbuchs)

delete from tabelle where id in (select distinct b.id from tabelle a,
tabelle b where a.id < b.id and a.a = b.a)

Re: Dupletten entfernen

am 21.07.2006 09:23:07 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Dupletten entfernen

am 21.07.2006 09:28:58 von Thomas Rachel

Thomas Dartsch wrote:

> in einer Tabelle gibt es diverse doppelte Einträge, die ich wieder
> bereinigen möchte. (also ein der beiden Duppleten löschen)

Deine Umlaute sind defekt.

> Beispiel:
>
> id 1
> A foo
> B bar1
>
> id 2
> A blub
> B bla
>
> id 3
> A foo
> B bar2

Das ist mir jetzt nicht klar. Poste doch bitte mal die Tabellenstruktur.
(SHOW CREATE TABLE ...\G im mysql-Client)

Sind id, A, B Spalten oder sind das da oben Spalten, wie sie tatsächlich
vorkommen? Ich vermute ersteres.

Dann geht ein

DELETE b FROM tabelle a JOIN tabelle b ON a.A=a.B AND a.id
aber damit löschst Du auch die Zuordnung foo -> bar2 - willst Du das?

> Ich suche nun nach einem SQL-Befehl, der die Doppelung von A=foo erkennt
> und einen Datensatz davon entfernt.

Da ist die Frage, welchen - oben hab ich mal festgelegt, daß der mit der
größten id raus soll.

Falls Du auf b testen willst: Test auf unterschiedliche id muß drinbleiben,
sonst wird alles gelöscht.


Thomas

Re: Dupletten entfernen

am 21.07.2006 11:59:40 von Norbert Melzer

Thomas Rachel schrieb:
> [Problem und Lösungsvorschlag]
> Da ist die Frage, welchen - oben hab ich mal festgelegt, daß der m=
it der
> größten id raus soll.

Tja, und ich persönlich hätte es genau andersherum gemacht, den=
n der mit
der höheren ID ist (ausgehend von einem "normalen" DB-Design) der ne=
uere
und somit aktueller.

Aber ich habe eh nicht die Ahnung von mySQL um solche Statements zu
zaubern :-) Bin schon froh daß ich 1:1 an die Daten komme die ich zu=
vor
eingefügt habe :-)

Und ich glaube so langsam (gaaanz langsam) raffe ich das auch mit den
Joins und kann die hoffentlich bald aus der Anwendung in die Datenbank
verlegen :-)

Aber ich schweife ab... Wollte eigentlich mit diesem Fup nur anzeigen
und darauf aufmerksam machen wie schnell man durch unvollständige In=
fos
des OP viele Unterschiedliche Lösungsansätze erhalten kann die =
sich alle
verhalten wie der OP es (laut Post) wollte, aber nur einer (oder
weniger) wie er es wirklich haben will...

Bye
Norbert

Re: Dupletten entfernen

am 21.07.2006 12:53:49 von Thomas Rachel

Norbert Melzer wrote:

> Tja, und ich persönlich hätte es genau andersherum gemacht, denn der mit
> der höheren ID ist (ausgehend von einem "normalen" DB-Design) der neuere
> und somit aktueller.

Hm - stimmt eigentlich , aber das sei dann man dem Ausführenden überlassen.

> Aber ich schweife ab... Wollte eigentlich mit diesem Fup nur anzeigen
> und darauf aufmerksam machen wie schnell man durch unvollständige Infos
> des OP viele Unterschiedliche Lösungsansätze erhalten kann die sich alle
> verhalten wie der OP es (laut Post) wollte, aber nur einer (oder
> weniger) wie er es wirklich haben will...

Eben - deshalb kommt es auf eine genaue Beschreibung an - etwas in der Art
"Ich mache da so was, aber das funzt nicht. Was mache ich flahcs????ßßß"
sind daher eher nicht zielführend.

Aber aus den Angaben des OP kann man immerhin so viel schließen, daß das,
was er will, so halbwegs klar wird. Das, was man ihm dann als Anhaltspunkt
gibt, kann er dann ja nach Belieben verfeinern.


Thomas