[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2004
    Beiträge
    197

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    19.323
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2004
    Beiträge
    197
    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;

  4. #4
    Registriert seit
    Sep 2004
    Beiträge
    197
    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.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    19.323
    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 ....)
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Sep 2004
    Beiträge
    197
    Super, vielen Dank. Hat geklappt.

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    19.323
    Und das trotz meiner Tippfehler;-).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

Ähnliche Themen

  1. SQL Function in Result ausführen
    Von dholtmann im Forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 11-05-18, 15:38
  2. .. gibt's da was im SQL..
    Von malzusrex im Forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 24-04-15, 07:23
  3. Bildschirmfeld wird nicht zurück gegeben
    Von Robi im Forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 28-04-14, 14:23
  4. SAVF per E-Mail und dann zurück auf AS/400
    Von JonnyRico im Forum IBM i Hauptforum
    Antworten: 13
    Letzter Beitrag: 14-11-02, 09:25
  5. Gibt es eine Alternative zu PW1
    Von becama im Forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 10-09-01, 19:50

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •