Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

www.webdp.net, Event 9 IIS log failed to write entry, wwwxxx jeffs, Catastrophic failure Unexpected method call sequence. 0x8000ffff (-2147418113)., ksh lock a file, [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_DBC failed, sed: -e expression #1, char 1: unterminated address regex, procmail + change subject, w2ksp4.exe download, /proc/kallsyms format

Links

XODOX
Impressum

#1: Doppelte Einträge löschen

Posted on 2005-09-21 09:37:05 by Heiko Rittelmeier

Hallo!


Ich habe eine Datenbank übernommen, die doppelte Einträge enthält.
Faktisch ist nicht der ganze Eintrag doppelt, sondern nur relevante
Teile.

Es ist eine Adressdatenbank und ich bräuchte eine Abfrage, die alle
Datensätze löscht, deren "Name" und "Branche" gleich ist. Ich habe
versucht, die relevanten Datensätze mit einem SELECT DISTINCT heraus
zu holen, das scheiterte aber daran, dass DISTICT sich nur auf eine
Spalte zu beziehen scheint.

Auch Dr. Google brachte nichts verwertbares.

Hätte einer von Euch eine Lösung?



Danke!



Heiko
--
http://www.computerbetrug.de - Gegen Straftaten im Internet
http://www.dialerhilfe.de - Gegen unseriöse Dialer

Report this message

#2: Re: Doppelte Einträge löschen

Posted on 2005-09-21 10:46:28 by Stefan Rybacki

Heiko Rittelmeier wrote:
> Hallo!
>
>
> Ich habe eine Datenbank übernommen, die doppelte Einträge enthält.
> Faktisch ist nicht der ganze Eintrag doppelt, sondern nur relevante
> Teile.
>
> Es ist eine Adressdatenbank und ich bräuchte eine Abfrage, die alle
> Datensätze löscht, deren "Name" und "Branche" gleich ist. Ich habe
> versucht, die relevanten Datensätze mit einem SELECT DISTINCT heraus
> zu holen, das scheiterte aber daran, dass DISTICT sich nur auf eine
> Spalte zu beziehen scheint.

Nein, Distinct arbeit auf allen im Select angegebenen Attributen.

Also
SELECT DISTINCT name, branche FROM table liefert dir genau die Doppelten.

allerdings willst du das nicht so.

du willst eher sowas:

DELETE FROM table WHERE id IN (SELECT a.id FROM table a JOIN table b USING (name, branche)
WHERE a.id<b.id)

(ungetestet)

Bis denn dann
Stefan

>
> Auch Dr. Google brachte nichts verwertbares.
>
> Hätte einer von Euch eine Lösung?
>
>
>
> Danke!
>
>
>
> Heiko

Report this message

#3: Re: Doppelte Einträge löschen

Posted on 2005-09-21 11:01:07 by Heiko Rittelmeier

Am Wed, 21 Sep 2005 10:46:28 +0200 schrieb Stefan Rybacki
<stefan.rybacki@gmx.net> :

>Heiko Rittelmeier wrote:
>> Hallo!
>>
>>
>> Ich habe eine Datenbank übernommen, die doppelte Einträge enthält.
>> Faktisch ist nicht der ganze Eintrag doppelt, sondern nur relevante
>> Teile.
>>
>> Es ist eine Adressdatenbank und ich bräuchte eine Abfrage, die alle
>> Datensätze löscht, deren "Name" und "Branche" gleich ist. Ich habe
>> versucht, die relevanten Datensätze mit einem SELECT DISTINCT heraus
>> zu holen, das scheiterte aber daran, dass DISTICT sich nur auf eine
>> Spalte zu beziehen scheint.
>
>Nein, Distinct arbeit auf allen im Select angegebenen Attributen.
>
>Also
>SELECT DISTINCT name, branche FROM table liefert dir genau die Doppelten.
>
>allerdings willst du das nicht so.
>

Wenn es eine Möglichkeit gibt zu sagen "Nehme alle, die bis auf die ID
identisch sind" dann will ich das schon.

Das SELECT DISTINCT * scheitert nämlich daran, dass die IDs nicht
identisch sind, sondern nur die Textfelder.


Viele GrüÃe,



Heiko
--
http://www.computerbetrug.de - Gegen Straftaten im Internet
http://www.dialerhilfe.de - Gegen unseriöse Dialer

Report this message

#4: Re: Doppelte Einträge löschen

Posted on 2005-09-21 11:15:07 by Kai Ruhnau

Heiko Rittelmeier wrote:
> Es ist eine Adressdatenbank und ich bräuchte eine Abfrage, die alle
> Datensätze löscht, deren "Name" und "Branche" gleich ist. Ich habe
> versucht, die relevanten Datensätze mit einem SELECT DISTINCT heraus
> zu holen, das scheiterte aber daran, dass DISTICT sich nur auf eine
> Spalte zu beziehen scheint.

Zunächsteinmal gehe ich davon aus, dass du nicht alle doppelten löschen
willst, sondern alle bis auf einen.

Leider unterstützt MySQL nicht das gleichzeitige SELECTen und verändern
(DELETE) von Datensätzen innerhalb einer einzelnen Abfrage, also musst
du den Umweg über eine Temporäre Tabelle oder eine Anwendung gehen.

Für alle doppelten Datensätze bis auf einen benutzt du dann in etwa
folgendes SELECT, wobei der Datensatz mit der kleinsten ID nicht
zurückgegeben wird.

SELECT DISTINCT a.ID
FROM tabelle AS a
LEFT JOIN tabelle AS b ON b.Name=a.Name
AND b.Branche=a.Brance
AND b.ID>a.ID
WHERE b.ID IS NOT NULL

Aber:
- vorher testen
- Backup nicht vergessen

Den Rest überlasse ich zur Ãbung :-)

GrüÃe
Kai

Report this message

#5: Re: Doppelte Einträge löschen

Posted on 2005-09-21 11:19:41 by Stefan Rybacki

Heiko Rittelmeier wrote:
> Am Wed, 21 Sep 2005 10:46:28 +0200 schrieb Stefan Rybacki
> <stefan.rybacki@gmx.net> :
>
>
>>Heiko Rittelmeier wrote:
>>
>>>Hallo!
>>>
>>>
>>>Ich habe eine Datenbank übernommen, die doppelte Einträge enthält.
>>>Faktisch ist nicht der ganze Eintrag doppelt, sondern nur relevante
>>>Teile.
>>>
>>>Es ist eine Adressdatenbank und ich bräuchte eine Abfrage, die alle
>>>Datensätze löscht, deren "Name" und "Branche" gleich ist. Ich habe
>>>versucht, die relevanten Datensätze mit einem SELECT DISTINCT heraus
>>>zu holen, das scheiterte aber daran, dass DISTICT sich nur auf eine
>>>Spalte zu beziehen scheint.
>>
>>Nein, Distinct arbeit auf allen im Select angegebenen Attributen.
>>
>>Also
>>SELECT DISTINCT name, branche FROM table liefert dir genau die Doppelten.
>>
>>allerdings willst du das nicht so.
>>
>
>
> Wenn es eine Möglichkeit gibt zu sagen "Nehme alle, die bis auf die ID
> identisch sind" dann will ich das schon.
>
> Das SELECT DISTINCT * scheitert nämlich daran, dass die IDs nicht
> identisch sind, sondern nur die Textfelder.
>

Richtig. Was ich meinte, war daà du die Lösung nicht möchtest, weil du die Einträge nicht
identifizieren kannst, d.h. du hast die ID trotzdem nicht und das hilft dir nicht weiter.
Desweiteren bekommst du auch die angezeigt, die nicht doppelt sind.

Bis denn dann
Stefan


>
> Viele GrüÃe,
>
>
>
> Heiko

Report this message

#6: Re: Doppelte Einträge löschen

Posted on 2005-09-21 12:13:58 by newsgroup

"Heiko Rittelmeier" <hr@mayl.de> schrieb im Newsbeitrag
news:21092005.093705.dcdm.$hr-nb$.1701@shavenaar.crisu.de...
> Hallo!
>
>
> Ich habe eine Datenbank übernommen, die doppelte Einträge enthält.
> Faktisch ist nicht der ganze Eintrag doppelt, sondern nur relevante
> Teile.
>
> Es ist eine Adressdatenbank und ich bräuchte eine Abfrage, die alle
> Datensätze löscht, deren "Name" und "Branche" gleich ist. Ich habe
> versucht, die relevanten Datensätze mit einem SELECT DISTINCT heraus
> zu holen, das scheiterte aber daran, dass DISTICT sich nur auf eine
> Spalte zu beziehen scheint.
>
> Auch Dr. Google brachte nichts verwertbares.
>
> Hätte einer von Euch eine Lösung?


delete from tabelle t1
where exists ( select 1 from tabelle t2 where t1.name = t2.name
and t1.branche =
t2.branche
and <alle
anderen doppelten Spalten>
and t1.id >
t2.id )

Das löscht alle Zeilen, die eine Duplette mit kleinerer ID haben. Das
heisst, von
allen Dupletten bleibt jeweils die mit der kleinsten ID zurück.

GruÃ,
Michael

Report this message

#7: Re: Doppelte Einträge löschen

Posted on 2005-09-21 12:50:13 by Kai Ruhnau

Michael König wrote:
> "Heiko Rittelmeier" <hr@mayl.de> schrieb im Newsbeitrag
> news:21092005.093705.dcdm.$hr-nb$.1701@shavenaar.crisu.de...

Zu lang. Es heiÃt Einleitungs_zeile_

>>Es ist eine Adressdatenbank und ich bräuchte eine Abfrage, die alle
>>Datensätze löscht, deren "Name" und "Branche" gleich ist. Ich habe
>>versucht, die relevanten Datensätze mit einem SELECT DISTINCT heraus
>>zu holen, das scheiterte aber daran, dass DISTICT sich nur auf eine
>>Spalte zu beziehen scheint.
[snip]
> delete from tabelle t1
> where exists ( select 1 from tabelle t2 where t1.name = t2.name
> and t1.branche =
> t2.branche
> and <alle
> anderen doppelten Spalten>
> and t1.id >
> t2.id )

http://dev.mysql.com/doc/mysql/en/delete.html

Ganz unten:
"Currently, you cannot delete from a table and select from the same
table in a subquery."

GrüÃe
Kai

Report this message

#8: Re: Doppelte Einträge löschen

Posted on 2005-09-24 12:32:42 by Stephan Weissenrieder

Heiko Rittelmeier <hr@mayl.de> writes:

> Hallo!
>
> Ich habe eine Datenbank übernommen, die doppelte Einträge enthält.
> Faktisch ist nicht der ganze Eintrag doppelt, sondern nur relevante
> Teile.
>
> Es ist eine Adressdatenbank und ich bräuchte eine Abfrage, die alle
> Datensätze löscht, deren "Name" und "Branche" gleich ist.


(Temporär) einen uniq index auf die 2 Spalten legen. Löscht aber
natürlich nicht alle sondern lässt jeweils einen Eintrag in der DB.



ALTER IGNORE TABLE eins ADD UNIQUE INDEX temp_index (id , id2) ;
Query OK, 4 rows affected (0.03 sec)
Records: 4 Duplicates: 1 Warnings: 0


HTH
Stephan

Report this message