<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Kommentare zu: MySQL: Doppelte Datensätze löschen</title>
	<atom:link href="http://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/</link>
	<description></description>
	<lastBuildDate>Wed, 19 Dec 2018 08:31:45 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>Von: Daniel</title>
		<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/comment-page-1/#comment-16936</link>
		<dc:creator>Daniel</dc:creator>
		<pubDate>Thu, 06 Dec 2012 15:55:44 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ebene7.com/?p=2552#comment-16936</guid>
		<description>Hallo Greg! Freut mich, dass es dir geholfen hat. Das SQL-Statement hat ja Subqueries und die könnten langsam sein, wenn kein Index gesetzt ist. Du kannst das ja für deinen Fall mal mit &quot;explain&quot; testen, dann sollte die Bremse sichtbar werden.</description>
		<content:encoded><![CDATA[<p>Hallo Greg! Freut mich, dass es dir geholfen hat. Das SQL-Statement hat ja Subqueries und die könnten langsam sein, wenn kein Index gesetzt ist. Du kannst das ja für deinen Fall mal mit &#8220;explain&#8221; testen, dann sollte die Bremse sichtbar werden.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Greg</title>
		<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/comment-page-1/#comment-16929</link>
		<dc:creator>Greg</dc:creator>
		<pubDate>Thu, 06 Dec 2012 13:45:46 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ebene7.com/?p=2552#comment-16929</guid>
		<description>Tausend Dank für die Anleitung. Ein Skript wurde mehrfach gestartet und hat mir zig tausend Duplicates in eine Tabelle gehauen. Dein Ansatz hat mir viel Zeit gespart und ich habe wieder einiges dazu gelernt. Vielen Dank nochmals. 
PS: Auf große Tabellen angewendet braucht das Löschquery aber seine Zeit (bei mir &gt; 10 min)  ;-)</description>
		<content:encoded><![CDATA[<p>Tausend Dank für die Anleitung. Ein Skript wurde mehrfach gestartet und hat mir zig tausend Duplicates in eine Tabelle gehauen. Dein Ansatz hat mir viel Zeit gespart und ich habe wieder einiges dazu gelernt. Vielen Dank nochmals.<br />
PS: Auf große Tabellen angewendet braucht das Löschquery aber seine Zeit (bei mir &gt; 10 min)  <img src='https://blog.ebene7.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: keiner</title>
		<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/comment-page-1/#comment-15742</link>
		<dc:creator>keiner</dc:creator>
		<pubDate>Thu, 15 Nov 2012 13:56:51 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ebene7.com/?p=2552#comment-15742</guid>
		<description>@bennson

Sehr gefährlich was Du da vorschlägst!!!
Da sieht man, dass Du nicht weiß wie ein DBMS funktioniert... sorry :-(

MySQL kann einfach nicht mit einem Statement realisieren, dass doppelte Datensätze gelöscht werden und nur einer davon stehen bleibt... zumindest ist mir das nicht bekannt.

Noch mal zum Delete-Statement:
Damit löscht Du die doppelten Einträge, richtig!
Allerdings alle!!! Es wird keiner mehr übrig bleiben...
Warum? Na dafür musst Du verstehen wie ein DBMS arbeitet - bin ganz schlecht im erklären, daher lasse ich es direkt sein. 
Aber hier als Gedankenansatz:
DELETE FROM a
USING db.tpl a
WHERE a.ID != (select min(c.id) from db.tpl c where c.mail=a.mail group by c.id)

Tipp: Ganz trivial ausgedrückt: Dein Join ist vollkommen irrelevant, da es keine Eingrenzung der Daten ergibt, welcher Datensatz am Ende stehenbleiben muss, da sich das Join immer auf die ursprüngliche Datenmenge vor dem Löschen bezieht und daher immer ein Ergebnis mit einer ID geben wird. Ergo: es werden alle Sätze gelöscht... Bei meinem Gedankenanreiz wird der Satz durch die min(id) bestimmt..

In anderen DBMS funktioniert sowas, da man dort bei einem gleichzeitigen Löschvorgang trotzdem noch Daten aus der Tabelle auslesen darf.
Allerdings funktioniert sowas nicht in MySQL :-(</description>
		<content:encoded><![CDATA[<p>@bennson</p>
<p>Sehr gefährlich was Du da vorschlägst!!!<br />
Da sieht man, dass Du nicht weiß wie ein DBMS funktioniert&#8230; sorry <img src='https://blog.ebene7.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>MySQL kann einfach nicht mit einem Statement realisieren, dass doppelte Datensätze gelöscht werden und nur einer davon stehen bleibt&#8230; zumindest ist mir das nicht bekannt.</p>
<p>Noch mal zum Delete-Statement:<br />
Damit löscht Du die doppelten Einträge, richtig!<br />
Allerdings alle!!! Es wird keiner mehr übrig bleiben&#8230;<br />
Warum? Na dafür musst Du verstehen wie ein DBMS arbeitet &#8211; bin ganz schlecht im erklären, daher lasse ich es direkt sein.<br />
Aber hier als Gedankenansatz:<br />
DELETE FROM a<br />
USING db.tpl a<br />
WHERE a.ID != (select min(c.id) from db.tpl c where c.mail=a.mail group by c.id)</p>
<p>Tipp: Ganz trivial ausgedrückt: Dein Join ist vollkommen irrelevant, da es keine Eingrenzung der Daten ergibt, welcher Datensatz am Ende stehenbleiben muss, da sich das Join immer auf die ursprüngliche Datenmenge vor dem Löschen bezieht und daher immer ein Ergebnis mit einer ID geben wird. Ergo: es werden alle Sätze gelöscht&#8230; Bei meinem Gedankenanreiz wird der Satz durch die min(id) bestimmt..</p>
<p>In anderen DBMS funktioniert sowas, da man dort bei einem gleichzeitigen Löschvorgang trotzdem noch Daten aus der Tabelle auslesen darf.<br />
Allerdings funktioniert sowas nicht in MySQL <img src='https://blog.ebene7.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Timo</title>
		<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/comment-page-1/#comment-13144</link>
		<dc:creator>Timo</dc:creator>
		<pubDate>Wed, 25 Jul 2012 10:07:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ebene7.com/?p=2552#comment-13144</guid>
		<description>Vielen, vielen Dank!

Hat super geholfen;
ganu die Idee wusste ich nicht umzusetzen.</description>
		<content:encoded><![CDATA[<p>Vielen, vielen Dank!</p>
<p>Hat super geholfen;<br />
ganu die Idee wusste ich nicht umzusetzen.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: bennson</title>
		<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/comment-page-1/#comment-8145</link>
		<dc:creator>bennson</dc:creator>
		<pubDate>Fri, 18 Nov 2011 08:44:08 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ebene7.com/?p=2552#comment-8145</guid>
		<description>DELETE FROM a

USING `db`.`tbl` a, `db`.`tbl` b
WHERE b.Mail = a.Mail
AND b.ID != a.ID</description>
		<content:encoded><![CDATA[<p>DELETE FROM a</p>
<p>USING `db`.`tbl` a, `db`.`tbl` b<br />
WHERE b.Mail = a.Mail<br />
AND b.ID != a.ID</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: doppelte Einträge in MySQL Datenbank finden &#171; JimiHUY</title>
		<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/comment-page-1/#comment-2570</link>
		<dc:creator>doppelte Einträge in MySQL Datenbank finden &#171; JimiHUY</dc:creator>
		<pubDate>Mon, 17 Jan 2011 09:58:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ebene7.com/?p=2552#comment-2570</guid>
		<description>[...] ich heute 17.01.11 auf diesen Blog Eintrag gestosen. Hier wird ein anderer Lösungsansatz gewählt. http://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/  veröffentlicht unter: Allgemein Kommentar schreiben     Kommentare (0) Trackbacks (0) ( [...]</description>
		<content:encoded><![CDATA[<p>[...] ich heute 17.01.11 auf diesen Blog Eintrag gestosen. Hier wird ein anderer Lösungsansatz gewählt. <a href="http://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/" rel="nofollow">http://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/</a>  veröffentlicht unter: Allgemein Kommentar schreiben     Kommentare (0) Trackbacks (0) ( [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Von: Clemens</title>
		<link>https://blog.ebene7.com/2011/01/12/mysql-doppelte-datensaetze-loeschen/comment-page-1/#comment-2544</link>
		<dc:creator>Clemens</dc:creator>
		<pubDate>Wed, 12 Jan 2011 09:42:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ebene7.com/?p=2552#comment-2544</guid>
		<description>Das ist schön und gut, dass die Ids aber referentielle Abhängigkeiten mit anderen Tabellen haben könnten, wird hier gar nicht behandelt.

Ich hatte letztens mal wieder einen schönen vermüllten Datensatz mit Nutzerregistrierungen und den unterschiedlichsten Merkmalen.
Duplikate habe ich mit mehreren Methoden, von grob auf fein herausgesucht.. Das waren einfach mehrere Queries, die mit GROUP BY und COUNT() und HAVING COUNT() &gt; 1 einzelne Duplikate gefunden haben. So funktioniert es auch über mehrere Tabellen hinweg mit einem JOIN.

In einer Schleife wurden dann die tatsächlichen Duplikate mit allen IDs und weiteren Merkmalen herausgesucht.
So konnte ich in späteren Datensätzen gegebenenfalls nicht mehr vorhandene Merkmale erhalten, mir die Reihenfolge aussuchen und mit einem Update auf die referentiellen Abhängigkeiten auf die neue ID hinweisen.

Da das eine einmalige Aktion ist, ist die Rechenintensität zu verschmerzen..</description>
		<content:encoded><![CDATA[<p>Das ist schön und gut, dass die Ids aber referentielle Abhängigkeiten mit anderen Tabellen haben könnten, wird hier gar nicht behandelt.</p>
<p>Ich hatte letztens mal wieder einen schönen vermüllten Datensatz mit Nutzerregistrierungen und den unterschiedlichsten Merkmalen.<br />
Duplikate habe ich mit mehreren Methoden, von grob auf fein herausgesucht.. Das waren einfach mehrere Queries, die mit GROUP BY und COUNT() und HAVING COUNT() &gt; 1 einzelne Duplikate gefunden haben. So funktioniert es auch über mehrere Tabellen hinweg mit einem JOIN.</p>
<p>In einer Schleife wurden dann die tatsächlichen Duplikate mit allen IDs und weiteren Merkmalen herausgesucht.<br />
So konnte ich in späteren Datensätzen gegebenenfalls nicht mehr vorhandene Merkmale erhalten, mir die Reihenfolge aussuchen und mit einem Update auf die referentiellen Abhängigkeiten auf die neue ID hinweisen.</p>
<p>Da das eine einmalige Aktion ist, ist die Rechenintensität zu verschmerzen..</p>
]]></content:encoded>
	</item>
</channel>
</rss>
