-
SQL mit fetch first 1 row only gibt kein result zurück
Hallo Zusammen,
Ich habe zwei Tabellen, die eine wird gelesen und aus der zweiten soll die Rechnungsnummer (CHAR) dazu angezeigt werden. Da aber die 2. Tabelle mehr Sätze enthält als die erste wollte ich mit dem Fetch first 1 row only mir die Nummer aus der 2. Tabelle holen und zwar nur einmal.
Leider werden überhaupt keine Daten angezeigt. Was mache ich falsch?
SQL:
select p1.brc1batn, p2.pirinv, p2.pibatn from speitec.brctrnq1 as p1
inner join (select pibatn, pirinv from spefil.pitrnp fetch first 1 row only) as p2 on p2.pibatn = p1.brc1batn;
Führe ich das SQL aus, wird gar kein Satz angezeigt.
Lasse ich den fetch weg, sprich
select p1.brc1batn, pirinv, pibatn from speitec.brctrnq1 as p1
inner join (select pibatn, pirinv from spefil.pitrnp) as p2 on p2.pibatn = p1.brc1batn;
werden die Daten angezeigt, aber halt mehrfach.
330976 03956 330976
330976 03956 330976
330976 03956 330976
Danke schonmal.
Gruß Klaus
-
Leider funktioniert ein "fetch first 1 rows only" nicht im Join, da dieser generell nur mit dem 1. Satz der gesamten Tabelle überhaupt durchgeführt wird.
Es gibt allerdings (je nach Release) folgende Möglichkeit:
select * from file1
cross join lateral table (
select * from file2 where file1.key = file2.key
fetch first 1 rows only
) f2
Ein Lateral-Zugriff wird tatsächlich je Zeile ausgeführt.
-
Super, vielen Dank. So hat es nun funktioniert:
select p1.brc1batn, p2.pirinv, p2.pibatn from speitec.brctrnq1 p1
cross join lateral (select * from spefil.pitrnp where p1.brc1batn = pibatn fetch first 1 rows only) p2;
-
Vielleicht kannst du mir noch beim update SQL helfen. Irgendwie will das nicht so klappen, sprich:
update speitec.brctrnq1 p1 set invnbr = Ergebnis aus dem SQL mit dem cross join lateral.
Danke.
-
Beim Update klappt das wieder mit dem fetch first..., da es sich um einen scalaren Subselect und keinen Join handelt:
update myfile a
set f1 = (
select f1 from file2 b inner join file3 c on b.key = c.key
where a.key = b.key
fetch first 1 rows only)
where exists (select * from file2 e where e.key=a.key)
Der scalare subselect wird hier wieder je Zeie ausgeführt.
Die Schluss-Whereklausel ist u.U. erforderlich, wenn der Subslect den Schlüssel nicht findet.
Falls mehrere Felder geändert werden sollen:
set (f1, f2, f3) = (select f1, f2, f3 from ....)
-
Super, vielen Dank. Hat geklappt.
-
Und das trotz meiner Tippfehler;-).
Similar Threads
-
By dholtmann in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 11-05-18, 15:38
-
By malzusrex in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 24-04-15, 07:23
-
By Robi in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 28-04-14, 14:23
-
By JonnyRico in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 14-11-02, 09:25
-
By becama in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 10-09-01, 19:50
Tags for this Thread
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