![]() |
AW: Datenbank Duplicates
Bei einem entsprechenden Index sollte das Upper() in der Abfrage nicht notwendig sein
|
AW: Datenbank Duplicates
Zitat:
|
AW: Datenbank Duplicates
Zitat:
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. |
AW: Datenbank Duplicates
Hm nachdem ich die Duplicates jetzt gefunden habe müsste ich diese noch löschen :)
Code:
Mein Anlauf war das SELECT Statement durch das DELETE Statement zu ersetzen aber dann bekomm ich die Fehlermeldung "Unknown token Upper".
SELECT UPPER(VORNAME) FROM NAMEN1 GROUP BY UPPER(VORNAME) HAVING (COUNT(*)>1)
Hat jemand einen Ansatz wie man duplicates aus einer DB löscht ? |
AW: Datenbank Duplicates
SQL-Code:
delete from namen1 where id not in ( SELECT MIN(ID), UPPER(VORNAME) FROM NAMEN1 GROUP BY UPPER(VORNAME));
|
AW: Datenbank Duplicates
Nur so ein Gedanke (ID soll der PK sein):
SQL-Code:
[edit] Das von Markus ist besser, meins würde ja alle Datensätze löschen, die doppelt vorgekommen sind. [/edit]
DELETE FROM NAMEN1
WHERE ID IN ( SELECT ID FROM NAMEN1 GROUP BY UPPER(VORNAME) HAVING (COUNT(*)>1) ) |
AW: Datenbank Duplicates
Hm ich habe kein Feld "id" ... Ist das zwingend notwendig ?
Reicht es nicht wenn ich das zu bearbeitende Feld betrachte ? |
AW: Datenbank Duplicates
Nein, denn du brauchst ja ein Kriterium, um die datensätze zu unterscheiden
|
AW: Datenbank Duplicates
Hm Ok also brauche ich jetzt ein zusätzliches Feld mit einem Index Typ, Richtig?
Code:
Wie sieht so ein Index dann aus? Ist das eine vorlaufende Nummer von 0,1,2,3 .. usw?
ALTER TABLE NEWTABLE ADD CONSTRAINT PKINDEX_IDX PRIMARY KEY (ID);
|
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 11:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz