![]() |
Re: Datensätze vergleiche
Na ja, dann packt man ein Trennzeichen zwischen die einzelnen Felder, das sonst im Text nicht vorkommt. Es ist sowieso performanter, einen Hash zu erzeugen, und diesen für einen Vergleich heranzuziehen.
|
Re: Datensätze vergleiche
Zitat:
mein Interbase 6 kennt kein exists. Ich bekomme immer die Fehlermeldung Dynamic SQL Error SQL error code = -104 Token unknown - line 2, char 14 exists Tanja |
Re: Datensätze vergleiche
Zitat:
Tanja |
Re: Datensätze vergleiche
Zitat:
kannst du mir sagen so ich so einen UDF bekommen kann und wie "Breit" dann der Hash-Wert ist. Dann würde ich es in eine neue Spalte einfügen und einen Index erzeugen. Dann sollte es ja schneller gehen. Danke Tanja |
Re: Datensätze vergleiche
Hallo Tanja,
nimm mal eine kleine Tabelle und probier das mal aus
SQL-Code:
Im Bsp ist Personal die Tabelle und Id der PrimKey.
select * from
personal where not exists (select id from personal) Das muss auch unter IB6 gehen. btw: welche Version von IB6 ist drauf ? Heiko |
Re: Datensätze vergleiche
Zitat:
ich habe hier die alte Version 6. Mit dem oben vor Dir geschrieben Select geht es zum Teil. Es kommt keine Fehlermeldung mehr wenn nicht kein Feldname hinter dem Where eingebe. Nur leider ist das Ergebis auch falsch, es kommt immer NULL und keine Ergebnismenge. Tanja |
Re: Datensätze vergleiche
Zitat:
|
Re: Datensätze vergleiche
Zitat:
Tanja |
Re: Datensätze vergleiche
Also:
1. Ein UDF ist eine 'User Defined Function'. Wie das genau mit IB6 geht, weiss ich nicht, aber man wird dir bestimmt helfen. Dessenungeachtet reicht es u.U. aus, für beide Tabellen einen Index auf ein Feld zu setzen, von dem man ausgehen kann, das es fast nur unterschiedliche Werte enthält (Den Namen z.B.). Dann vergleicht man beide Tabellen mit einem Join. Das Liefert in relativ kurzer Zeit alle identischen Zeilen.
SQL-Code:
Wenn man nur die Unterschiede möchte, dann verwendest Du einfach einen Full Join:
Select *
from Tabelle1 Join Tabelle2 on Tabelle1.IndexFeld = Tabelle2.IndexFeld and Tabelle1.Feld1 = Tabelle2.Feld1 and Tabelle1.Feld2 = Tabelle2.Feld2 ...
SQL-Code:
willst Du nur die Datensätze, die in Tabelle1 ABER NICHT in Tabelle2 sind, dann einen LEFT JOIN
Select *
from Tabelle1 Full Join Tabelle2 on Tabelle1.IndexFeld = Tabelle2.IndexFeld and Tabelle1.Feld1 = Tabelle2.Feld1 and Tabelle1.Feld2 = Tabelle2.Feld2 ... where Tabelle1.IndexFeld is null or Tabelle2.IndexFeld is null
SQL-Code:
Das sollte auch bei 800.000 Zeilen in vertretbarer Zeit durchzuführen sein. Bei SQL gilt: Probieren und Indexieren.
Select *
from Tabelle1 LEFT Join Tabelle2 on Tabelle1.IndexFeld = Tabelle2.IndexFeld and Tabelle1.Feld1 = Tabelle2.Feld1 and Tabelle1.Feld2 = Tabelle2.Feld2 ... where Tabelle2.IndexFeld is null Um nun die Zeilen eindeutig zu identifizieren, solltest du ihnen vorher eine 'AutoInc'-Spalte, also einen PrimaryKey verpassen. |
Re: Datensätze vergleiche
Ein IMHO gute Seite zu dem Thema ist
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 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