-
sql left outer join
Guten Morgen,
Ich habe eine führende Datei A und eine "nicht immer vorhandene" Datei B
Leider gibt es Fälle in denen der Key in Datei B doppelt vorhanden ist.
Bei 10 Sätzen in Datei A bekomme ich 12 Sätze durch den select, obwohl mit dem Key aus Datei A nur 7 passende Sätze in Datei B sind. Diese aber mehrfach.
select * from DateiA left outer join DateiB on a.key = b.key
ich möchte quasi ein
select * from DateiA left outer join DateiB on a.key = max(b.key) group by b.key
Das geht aber nicht.
Wer kann mir helfen,
Danke!
-
Du müsstest dafür ein Subselect von DateiB machen ...
[CODE]With B as (Select Key, Feld1, Feld2, ... from DateiB Groupb By Key)
Select * From from DateiA a left outer join B on a.key = b.key[/CODE
lg Andreas
-
Wenn a.key = b.key dann ist a.key = max(b.key)!
Das hilft dir so also nicht.
Du benötigst ein zusätzliches Kriterium um den letzten Satz aus DateiB zu ermitteln.
-
Hallo.
An die SQL Profis :
wäre das nicht mal was für
FETCH FIRST 1 ROWS ONLY
Gruß,
Ralf
-
Wenn Du kein zusätzliches Kriterium hast, dann kannst Du Dir mit der RRN behelfen:
select * from DateiA a left join DateiB b on a.feld1=b.feld1
where rrn(b) in (select max(rrn(DateiB)) from DateiB group by feld1)
or rrn(b) is null
-
Für rrn(x) existiert glaube ich erst ab V7R1 ein Pseudoindex, ansonsten kann das langsam sein.
"Fetch first 1 rows only" klappt im skalaren Subselect.
Ob das auch im "Left Join (select * from file fetch first 1 records only) b on a.key = b.key" sinn macht, wage ich zu bezweifeln.
-
erst mal vielen Dank
ich habe nun diese Version, gewählt
select * from DateiA A left outer join (select distict f1, f2, f3, ... from DateiB) B on A.key = B.key
das funktioniert richtig
Danke
Gruß
DiBe
-
Das ist eher unüblich und würde bedeuten, dass du in DateiB vollkommen doppelte Daten hast.
Außerdem ist dies nun nicht besonders schnell, da du Indexzugriffe auf DateiB ggf. verhinderst.
-
Nun ja, bis auf die letzten 4 Felder (die mich nicht interessieren) sind in der Datei tatsächlich alle gleich.
Performance spielt hier nicht die Rolle, eher die Lösung an sich ...
-
Hallo *all,
wer zerschlägt dann mal den gordischen Knoten in meinem neuronalen Netz.
Habe hier einen Kundenstamm und dazu eine Auftragsdatei.
Ich möchte jetzt zu der Auftragsdatei jeweils den letzten Auftragssatz nach Datum haben.
Abfrage:
Code:
select t01.adkto, max(t02.akkdtl), t02.akanr from
adr01pf t01 left join ako01pf t02
on t01.adkto = t02.akkto
where adfa = 1
and adsts = 0
and akkdj1 = 1
and (akkdtl > 150101 and akkdtl < 990000)
group by adkto, akanr, akkdtl
order by adkto, akkdtl
Ergebnis:
nummer Nr.
Code:
1001 150.422 149326
1001 150.914 150209
1006 150.128 563217
1006 150.428 563933
1009 151.008 564651
Aber irgendwas ist ja noch falsch, sonst würde die Kunden 1001 nicht zweimal auftauchen.
-
is ja klar, wenn du auch noch nach Auftragsnummer gruppierst
kf
-
select t01.adkto, max(t02.akkdtl), t02.akanr ...
group by adkto, akanr, akkdtl
Aggregate sind Ergebnisfelder der Gruppierung.
Gruppierst du auf Aggregaten kannst du das Aggregat auch gleich weglassen.
Fluch der Erlaubnis, dass auf nicht selektierten Felder gruppiert und sortiert werden darf.
Früher wäre der group by akkdtl abgewiesen worden da dieser nicht selektiert sondern im Aggregat verwendet wird.
Similar Threads
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 17-11-14, 14:52
-
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 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