[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2001
    Beiträge
    11

    Question SQL, Datei mit sich selber verknüpft

    Hallo,

    ich habe über SQL eine logische Datei erstellt mit CREATE VIEW:

    CREATE VIEW bib1/lf9 AS SELECT * FROM pf WHERE fld1!!fld2!!fld3 in SELECT(
    max(fld1!!fld2!!fld3) from pf group by fld1,
    fld2)

    Wenn ich auf diese Datei zugreife, dauert das Exigkeiten. Ich benötige alle Felder, kann also dort keine Einschränkungen machen. Gibt es einen besseren Weg? (im Orginal verknüpfe ich über 4 Felder). Ich benötige je fld1, fld2 das Maximum aus der Verkettung von fld1 bis fld3/(fld4).

    Danke schonmals.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    Wenn über fld1 und fld2 kein Index vorhanden ist, dann wird der Select dynamisch durchgeführt.
    Erstellen Sie mittels CREATE INDEX einen zusätzlichen Schlüssel, so dass der SQL-Optimizer diesen mitverwenden kann.
    Desweiteren ergänzen Sie ggf. ihre VIEW mit ORDER BY, da GROUP BY nicht zwingend eine Schlüsselfolge ergibt.
    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

  3. #3
    Registriert seit
    Oct 2001
    Beiträge
    11

    Talking

    Den Index über die ersten 2 Felder werde ich mal ausprobieren. Beim CREATE VIEW kann ich leider kein ORDER BY angeben. Aber vielleicht hilft der Index schonmal. Danke!


  4. #4
    Registriert seit
    Jan 2001
    Beiträge
    340

    Post


    <BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>. . .WHERE fld1!!fld2!!fld3 in SELECT(
    max(fld1!!fld2!!fld3) from pf group by fld1,
    fld2)[/quote]

    die Funktion max liefert m.E. geneu einen Wert zurück, so daß
    Code:
    . . .WHERE fld1!!fld2!!fld3 = SELECT( 
    max(fld1!!fld2!!fld3) from pf)
    eigentlich das selbe Ergebnis bringen sollte, nur vielleicht etwas schneller?

    Gruß Rolf

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    Bei meiner 1.Antwort habe ich den Subselect nicht erkannt.
    Wenn man aber genau hinschaut, komme ich zu folgendem Ergebnis:
    Der Subselect gibt eine Liste von Werten über ALLE Sätze der Datei pf nach Gruppierung fld1 und fld2. Diese Liste wird nun gegen JEDEN Satz des Primärselect's verglichen. Da aber nun fld1 und fld2 auch im Primärselect für den Vergleich herangezogen werden, enthält die Werteliste unnötige Werte, daher sollte der Select eigentlich wie folgt aussehen:

    CREATE VIEW bib1/lf9 AS SELECT * FROM pf a WHERE a.fld1!!a.fld2!!a.fld3 in SELECT(
    max(b.fld1!!b.fld2!!b.fld3) from pf b where a.fld1=b.fld1 and a.fld2=b.fld2)

    Da eine direkte Beziehung über fld1 und fld2 besteht, kann mittels WHERE bereits eine Einschränkung der Werteliste durchgeführt werden. Der Group by kann entfallen !!!

    Wenn nun über fld1 und fld2 noch ein Index besteht müßte der Select jetzt entsprechend schneller ablaufen.
    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

Similar Threads

  1. Editcode in SQL beschriebener Datei ?
    By ILEMax in forum IBM i Hauptforum
    Antworten: 16
    Letzter Beitrag: 24-01-07, 09:04
  2. Probleme mit SQL
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 26-09-06, 14:51
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. Embedded SQL in Modul - Nach Insert bleibt Datei gesperrt (*EXCL)
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 09-12-04, 12:21

Berechtigungen

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