[NEWSboard IBMi Forum]

Thema: Sql Rekursiv

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Nochmal zum Verständnis:
    In Deiner Bestell-Datei sind für B1BNR01 mehrere gleiche Werte. In B1BNR02 sind für den gleichen B1BNR01-Schlüssel-Wert mehrere verschiedene Werte und u.a. ist auch mindestens 1x der Wert 0 zu finden (kein NULL-Wert?!).
    Du versuchst für einen bestimmten Schlüssel den Satz mit der 0 zu finden?

    Sofern es das ist, das Du das willst, kann es mit SQL ganz einfach gelöst werden (da braucht man auch kein verschachteltes Sub-Select)

    Code:
    Select Fld1, Fld2, ... FldN
    From YourTable
    Where B1BNR01 = 'YOURVALUE' and B1BNR02 = 0;
    Mir ist übrigens auch schleierhaft, warum Du deinen Key nicht einfach um ein zweites Schlüssel-Feld erweiters (bzw. eine LF oder besser einen SQL Index anlegst mit 2 Schlüssel-Feldern. Dann könntest Du den Satz auch mit native I/O direkt greifen.

    Solltest Du stattdessen tatsächlich eine Rekursion wollen, d.h. mit dem in B1BNR02 gefundenen Wert muss ein Zugriff auf B1BNR02 erfolgen und der letzte Wert in B1BNR02 ermittelt werden, könnte die Abfrage evtl. wie folgt aussehen (Mindest-Release 7.1)

    Code:
    Select *
      From YOURTABLE
      Start With B1BNR01 = 'YOURVALUE'
      Connect By Prior B1BNR01 = B1BNR02
      Order By Level Desc
      Fetch First Row Only;
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    So wie es aussieht könnte es sich um eine "verkettete Liste" handeln.
    D.h., das Feld B1NR02 verweist "rekursiv" auf sich selbst, bis der letzte Satz keinen weiteren Verweis mehr hat, z.B.:
    1 => 5 => 12 => 0
    2 => 3 => 7 => 11 => 0
    17 => 4 => 6 => 35 => 0
    Dies ist mit einer SQL-Methode hier tatsächlich nicht zu lösen sondern ebenso mittels einzelner "Select into " zu lösen. Ein Cursor ist nicht erforderlich.

    Allerdings solltest du dir hier tatsächlich ein anderes Model entwickeln, denn solche Strukturen sind SQL-technisch nicht vernünftig und schon gar nicht performant auswertbar.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •