Re: Schnelles Auffinden doppelter Daten
- From: "Carl-Christian Schaffert" <carl-chrisitan.schaffert@xxxxxx>
- Date: Fri, 26 Jun 2009 11:41:38 +0200
Hallo Henning,
Alternativ, ebenfalls SQL:
select * from tabelle1 where VAL in (select val from tabelle1 group by
val having count(val)>1);
Also, damit bekommst du dann alle doppelten Daten angezeigt - aber wenn
du dann einfach alle in dieser Abfrage angezeigten Daten löschst, dann
hast du keine der Zeilen mehr. Also wenn du drei Datensätze mit val=3
hast, dann werden alle drei angezeigt - und ggf. auch gelöscht. Das ist
aber ja nicht der Plan.
Selektiert erst einmal alle Zeile aus der Meneg heraus, deren Wert mehr
als einmal in der Tabelle vorkommt. Dann muß man nur noch mit dieser
Teilmenge weiterarbeiten...
Tja, aber wie machst du das denn? Machst du das manuell? Also gehst du
die Tabelle durch und löschst die Zeilen? Bei 20 Zeilen geht das ja
vielleicht noch, aber bei 10.000 Zeilen kann das schon mal länger dauern
(besser vorher mit genug Snickers eindecken).
Die ZeileINSERT INTO #arbeitstabelle SELECT DISTINCT Kennung FROM tabellefunktioniert nur, wenn die 'tabelle' wirklich nur eine Spalte hat, aber
nicht, wenn 'Kennung' den PK darstellt und der Wert in einer anderen
Spalte sitzt.
In einem anderen Posting hatte Rene gesagt, dass die Tabelle nur eine
Spalte hat - genau diese GUID Spalte :)
Wenn es mehr als eine Spalte gibt, dann muss das natürlich etwas anders
aussehen. Wenn man davon ausgeht, dass alle Spalten identisch sind und
es doppelte Zeilen gibt dann müsste das so gehen:
--- cut ---
BEGIN TRAN
CREATE TABLE #arbeitstabelle (key uniqueidentifier, val varchar(50))
INSERT INTO #arbeitstabelle SELECT DISTINCT key, val FROM tabelle
DELETE tabelle
INSERT INTO tabelle SELECT key, val FROM #arbeitstabelle
DROP TABLE #arbeitstabelle
und es würde auch so gehen:
SELECT DISTINCT * INTO #arbeitstabelle FROM table
DELETE table
INSERT INTO table SELECT * FROM #arbeitstabelle
DROP TABLE #arbeitstabelle
....dann brauchst du dir über Datentypen keine Gedanken zu machen.
COMMIT TRAN
--- cut ---
Gibt es doppelte Zeilen, in denen nur das val doppelt ist, die aber über
keinen doppelten key verfügen (weil der per newid() angelegt wurde)
könnte das so gehen:
--- cut ---
BEGIN TRAN
CREATE TABLE #arbeitstabelle (key uniqueidentifier, val varchar(50))
INSERT INTO #arbeitstabelle
SELECT key, val FROM tabelle WHERE key IN (SELECT Min(key) FROM tabelle
GROUP BY val HAVING Count(val)>1)
Das würde nur bei numerischen keys gehen und nicht bei guid's/uniqueidentifier... und es würde eh daneben gehen, denn du hättest in der arbeitstabelle nur die Datensätze die in deinem Select doppelt (HAVING Count(val)>1)) waren... alle anderen wären flöten gegangen ;-)
DELETE tabelle
INSERT INTO tabelle SELECT key, val FROM #arbeitstabelle
DROP TABLE #arbeitstabelle
COMMIT TRAN
--- cut ---
Abgesehen davon liegt ihr beide daneben, denn die Daten stammen nicht aus tables sondern von unterschiedlichen services und sind in einem DataTable enthalten ;-).
Gruß Carl
.
- Follow-Ups:
- Re: Schnelles Auffinden doppelter Daten
- From: Henning Eiben
- Re: Schnelles Auffinden doppelter Daten
- From: Johannes Busch
- Re: Schnelles Auffinden doppelter Daten
- References:
- Schnelles Auffinden doppelter Daten
- From: Rene Weise
- Re: Schnelles Auffinden doppelter Daten
- From: Henning Eiben
- Re: Schnelles Auffinden doppelter Daten
- From: Johannes Busch
- Re: Schnelles Auffinden doppelter Daten
- From: Henning Eiben
- Schnelles Auffinden doppelter Daten
- Prev by Date: Re: Schnelles Auffinden doppelter Daten
- Next by Date: Problem mit ODBC Connection
- Previous by thread: Re: Schnelles Auffinden doppelter Daten
- Next by thread: Re: Schnelles Auffinden doppelter Daten
- Index(es):
Relevant Pages
|