![]() |
Re: SELECT DISTINCT und JOIN - Redundanzen verringern
Zitat:
Zitat:
Und wenn ich dein nun endlich richtig verstanden hab, willst du für jede ID (837-843) jeweils einen einzigen Datensatz in deine Zieltabelle schreiben. Welcher, scheint dir egal zu sein... Da wird dir also nix anderes übrig bleiben, als DS für DS zu durchlaufen, sortiert nach ID, und sobald du eine neue ID erhälst, schreibst du den DS in deine Zieltabelle. Anders wird das wohl nicht klappen. |
Re: SELECT DISTINCT und JOIN - Redundanzen verringern
Zitat:
Zitat:
Da ich (anders als die Post-Textdatei) mit einer relationalen DB arbeite, brauche ich sowieso getrennte Nachschlagetabellen mit einem PrimaryKey. Da bietet sich eine Tabelle "Straßennamen" an. Jürgen @Jelly Das, was Du zitiert hast, ist die Quelltabelle. "... jeweils einen einzigen Datensatz in deine Zieltabelle schreiben. Welcher, scheint dir egal zu sein..." Nicht ganz egal (ich bevorzuge Status 'G'), aber fast. |
Re: SELECT DISTINCT und JOIN - Redundanzen verringern
Dann hol dir jeweils den 1. Datensatz mit der selben ID.
SQL-Code:
select STR_ID, MIN( name1), MIN(Name2), MIN(Name3) from Tabelle ORDER BY STR_ID;
|
Re: SELECT DISTINCT und JOIN - Redundanzen verringern
Zitat:
Kann ich da noch den Status einbauen? Mir ist gerade die Idee gekommen, dass ich den Status 'G' durch '0' ersetzen könnte; dann wäre bei "Order By Str_ID, Status" der jeweils erste Treffer derjenige, den ich in die Zieltabelle nehmen möchte. Aber mir fehlt noch eine Idee, wie ich das mit "FIRST 1" kombinieren könnte. (Ich vermute, dass ein doppeltes SELECT mit SELF-JOIN zu meinen Problemen geführt hat.) Jürgen |
Re: SELECT DISTINCT und JOIN - Redundanzen verringern
Oder eventuell so:
SQL-Code:
select StrId, Status, Name_Sort, Name46, Name22
from Tabelle where StrNr = 1 |
Re: SELECT DISTINCT und JOIN - Redundanzen verringern
Welchen Status willst du?
|
Re: SELECT DISTINCT und JOIN - Redundanzen verringern
Zitat:
|
Re: [Erledigt] SELECT DISTINCT und JOIN - Redundanzen verrin
Danke an Jelly und mkinzler,
aufbauend auf Euren Hinweisen habe ich es geschafft und dabei sogar den Status eingebaut. Die entscheidenden Ideen waren, MIN() zu verwenden mit passender Sortierung. Zusätzlich werden GROUP BY und ORDER BY sowie weiterhin DISTINCT benötigt. So sieht jetzt mein Code aus:
SQL-Code:
Alle Informationen werden so übernommen wie gewünscht; der bevorzugte Status 'G' musste vorher durch '0' (Null) ersetzt werden. Meine Idee dabei ist, dass der Status vor die (variablen) Namen gesetzt wird, dann der Minimalwert übernommen und vor dem Speichern wieder entfernt wird.
INSERT INTO STR_Namen
( ID, Aendg_per, Name_Sort, Name_lang, Name_kurz ) SELECT DISTINCT str_id, max(Geltung), min(Name_sort), SUBSTR(min(Status || Name46), 2,50), SUBSTR(min(Status || Name22), 2,50) FROM Quelle_Post_St GROUP BY Str_id, Name_sort ORDER BY Str_id, Name_sort Das Ganze läuft auch in akzeptabler Geschwindigkeit von weniger als zwei Minuten (nicht gemessen, nur gefühlt - bei 512 MB RAM). Danke für Eure Hilfe! Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 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 by Thomas Breitkreuz