-
sql join mit distinct o.ä.
Moin *all
ich habe
select a.f1, c.f3 from datei1 a
left outer join datei2 b on a.key1 = b.key2
left outer join datei3 c on b.feld = c.feld
brauche also Daten aus Datei 1 und 3
Zur Verknüpfung von 1 und 3 muss ich über datei2 gehen.
Diese hat aber ab und an mehrere Sätze die zu Datei1 passen.
Wie kann ich die Verknüpfung auf einen Satz reduzieren
Es ist 100% sicher, das FELD in allen Datensäzen eine Gruppe in datei 2 immer gleich ist.
Bsp
PHP-Code:
Datei 1, key1 Feld F3
11111111
22222222
33333333
Datei 2 11111111 A
33333333 B
33333333 B
Datei 3
A 5
B 7
Soll Ergebnis 11111111 5
22222222
33333333 7
ist Ergebnis 11111111 5
22222222
33333333 7
33333333 7
Einer ne Idee?
Danke
Gruß
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Ich hab es erstmal so gelöst, aber gibt es nix besseres?
with x as (select distinct key2, feld from datei2)
select a.f1, c.f3 from datei1 a
left outer join x on a.key1 = x.key2
left outer join datei3 c on x.feld = c.feld
Danke
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Nö, nur andere Schreibweisen:
left join (select key2, min(Feld) feld from datei2 Group by key2) on key1=key2
Könnte ggf. schneller sein.
Nächste Alternative:
with x as (
select f1, f3
, (select Feld from datei2 where key1 = key2 fetch first 1 rows only) feld
from date1)
select * from x
left join datei3 c on x.feld = c.Feld
Falls bei dir der Fetch first an dieser Stelle noch nicht geht (ab V6), dann hilft hier ggf. ein Distinct oder Min(), falls "Feld" nicht eindeutig.
-
Vielleicht sehe ich das Problem nicht, aber warum machst du nicht einfach einen SELECT DISTINCT?
Code:
select DISTINCT a.f1, c.f3 from datei1 a
left outer join datei2 b on a.key1 = b.key2
left outer join datei3 c on b.feld = c.feld
Perfomancemäßig könnte es sein, dass die Variante mit der Common Table Expression bzw. dem verschachtelten Sub-Select in der From-Anweisung ein schnelleres Ergebnis liefern.
Das müsste man über Visual Explain analysieren.
Birgitta
-
Meine Erfahrung zu Distinct ist eher eine Verlangsamung, da ja alle Daten gelesen werden müssen.
-
Zitat von Fuerchau
... da ja alle Daten gelesen werden müssen.
Noch nicht mal in alter Zeit (allenfalls in ganz alter Zeit so Release 4) war das so, dass beim Distinct alle Daten gelesen werden müssen.
Dass die Daten komplett gelesen werden müssen, ist entweder eine Vermutung oder eine falsche Indexing Strategy.
Mit dem richtigen Index kann ein IOA (Index Only Access) mit Index-Probe (bzw. CQE Index Key Positioning) oder notfalls Index-Scan erfolgen.
Ohne genaue Analyse kann man nicht mehr sagen .
... Ich hatte ja auch "könnte" und außerdem "analysieren" geschrieben!
Birgitta
Similar Threads
-
By Harald.Wallukat in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 06-12-13, 09:37
-
By GS in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 21-11-02, 08:51
-
By muadeep in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 05-07-02, 10:37
-
By KB in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 01-08-01, 09:28
-
By HoScHiE in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 11-07-01, 07:57
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks