Delphi-PRAXiS
Seite 3 von 6     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datenbank Duplicates (https://www.delphipraxis.net/152432-datenbank-duplicates.html)

mkinzler 23. Jun 2010 11:40

AW: Datenbank Duplicates
 
Bei einem entsprechenden Index sollte das Upper() in der Abfrage nicht notwendig sein

idefix2 23. Jun 2010 11:43

AW: Datenbank Duplicates
 
Zitat:

Angenommen ich füge diesen Index im nachhinein ein, werden dann die (jetzt neuen) Duplicates rausgeschmissen oder wie verhält sich das?
Ich würde eine neue Tabelle mit geeigneter Collation erstellen und die Werte der alten Tabelle mittels "Update or insert" Statement in die neue Tabelle einfügen, dann die alte Tabelle löschen und die neue Tabelle umbenennen. Dann sind die Duplicates weg.

idefix2 23. Jun 2010 11:48

AW: Datenbank Duplicates
 
Zitat:

Bei einem entsprechenden Index sollte das Upper() in der Abfrage nicht notwendig sein
Das glaube ich nicht.
Ein Index wird von Firebird ja nur dazu verwendet, Abfragen zu beschleunigen, die zu dem Index passen. Bei der Abfrage selbst gibst Du aber keinen Index an, die Abfrage ist also erst einmal Indexunabhängig defniert. Kommt in der Abfrage kein UPPER vor und Du hast einen Index mit UPPER definiert, dann wird dieser Index für die Abfrage ganz einfach nicht verwendet, weil er ja nicht zur Abfrage passt.

-187- 24. Jun 2010 17:01

AW: Datenbank Duplicates
 
Hm nachdem ich die Duplicates jetzt gefunden habe müsste ich diese noch löschen :)

Code:
SELECT UPPER(VORNAME) FROM NAMEN1 GROUP BY UPPER(VORNAME) HAVING (COUNT(*)>1)
Mein Anlauf war das SELECT Statement durch das DELETE Statement zu ersetzen aber dann bekomm ich die Fehlermeldung "Unknown token Upper".

Hat jemand einen Ansatz wie man duplicates aus einer DB löscht ?

mkinzler 24. Jun 2010 18:26

AW: Datenbank Duplicates
 
SQL-Code:
delete from namen1 where id not in ( SELECT MIN(ID), UPPER(VORNAME) FROM NAMEN1 GROUP BY UPPER(VORNAME));

DeddyH 24. Jun 2010 18:28

AW: Datenbank Duplicates
 
Nur so ein Gedanke (ID soll der PK sein):
SQL-Code:
DELETE FROM NAMEN1
WHERE ID IN (
  SELECT ID
  FROM NAMEN1 
  GROUP BY UPPER(VORNAME)
  HAVING (COUNT(*)>1)
)
[edit] Das von Markus ist besser, meins würde ja alle Datensätze löschen, die doppelt vorgekommen sind. [/edit]

-187- 24. Jun 2010 20:16

AW: Datenbank Duplicates
 
Hm ich habe kein Feld "id" ... Ist das zwingend notwendig ?

Reicht es nicht wenn ich das zu bearbeitende Feld betrachte ?

mkinzler 24. Jun 2010 20:25

AW: Datenbank Duplicates
 
Nein, denn du brauchst ja ein Kriterium, um die datensätze zu unterscheiden

-187- 24. Jun 2010 20:31

AW: Datenbank Duplicates
 
Hm Ok also brauche ich jetzt ein zusätzliches Feld mit einem Index Typ, Richtig?

Code:
ALTER TABLE NEWTABLE ADD CONSTRAINT PKINDEX_IDX PRIMARY KEY (ID);
Wie sieht so ein Index dann aus? Ist das eine vorlaufende Nummer von 0,1,2,3 .. usw?

mkinzler 24. Jun 2010 20:35

AW: Datenbank Duplicates
 
Eine Tabelle sollte immer einen PK haben ( am Besten einen syntetischen; ist aber Geschmacksache).
In deinem Fall würde ich eine neue Tabelle erzeugen ( mit ID mit autoinc) und dann die Werte von der "alten" in die neue Kopieren:
SQL-Code:
Insert into Name ( Vorname) select UPPER(VORNAME) FROM NAMEN1 GROUP BY UPPER(VORNAME);


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 Uhr.
Seite 3 von 6     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz