[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    119

    Post geht dieser SQL-Befehl auch einfacher?

    Hallo!

    Ich möchte mehrere Felder einer Datei mit den Feldern einer anderen Datei ändern.
    An sich kein Problem. Ich möchte nur gerne wissen, ob die folgende Syntax auch noch einfacher geht, falls ich in der Zukunft noch mehr Felder habe.

    update auftpf1 a set
    aufzntureg=(select kdszntureg from kdstpf1 b
    where a.auffirma=b.kdsfirma and a.aufkundnr=b.kdskundnr),
    aufzntreg=(select kdszntreg from kdstpf1 b where a.auffirma=b.kdsfirma and
    a.aufkundnr=b.kdskundnr),
    aufzntreg2=(select kdszntreg2 from kdstpf1 b where a.auffirma=b.kdsfirma and
    a.aufkundnr=b.kdskundnr),
    aufverksch=(select kdsverksch from kdstpf1 b where a.auffirma=b.kdsfirma and
    a.aufkundnr=b.kdskundnr)
    where aufkundnr in (select kdskundnr
    from kdstpf1 c where a.auffirma=c.kdsfirma)

    Vielen Dank.
    Reiner

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

    Post

    das kommt darauf an , für 4.4 ist die Syntax :
    http://publib.boulder.ibm.com/pubs/h...dt.htm#HDRUPDT

    da geht es also

    Gruß Rolf

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.236

    Post

    Auch wenn Sie obigem Link folgen, werden Sie sehen, dass Ihre Syntax genau die einzige Möglichkeit ist, mehrere Felder aus einer anderen Tabelle upzudaten.
    Da je mehrere Subselect durchgeführt werden, wird auch die Performance entsprechend darunter leiden.

    Die schnellste Möglichkeit ist hier, ein SQL-Programm zu schreiben, dass den gewünschten Update durchführt.

    Als Alternative kann ich nur noch mein Tool SQLCPY unter www.fuerchau.de anbieten, dass genau für solche Fälle entwickelt wurde.
    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

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

    Post

    wenn man obigem link folgt ...

    Code:
    create table qtemp/test1
       ( feld1 dec ( 5, 1)
       , feld2 dec ( 5, 1)
       , feld3 dec ( 5, 1)
       , feld4 dec ( 5, 1)
       );
    
    create table qtemp/test2
       ( feld1 dec ( 5, 1)
       , feld2 dec ( 5, 1)
       , feld3 dec ( 5, 1)
       , feld4 dec ( 5, 1)
       );
    
    create table qtemp/test3
       ( feld1 dec ( 5, 1)
       , feld2 dec ( 5, 1)
       , feld3 dec ( 5, 1)
       , feld4 dec ( 5, 1)
       );
    
    insert into qtemp/test1 values(  1,  1,  1,  1);
    insert into qtemp/test1 values(  2,  2,  2,  2);
    insert into qtemp/test1 values(  3,  3,  3,  3);
    insert into qtemp/test1 values(  4,  4,  4,  4);
    insert into qtemp/test1 values(  5,  5,  5,  5);
    insert into qtemp/test1 values(  6,  6,  6,  6);
    
    insert into qtemp/test2 values(  1,  1,  1,  1);
    insert into qtemp/test2 values(  2,  2,  2,  2);
    insert into qtemp/test2 values(  3,  3,  3,  3);
    insert into qtemp/test2 values(  4,  4,  4,  4);
    insert into qtemp/test2 values(  5,  5,  5,  5);
    insert into qtemp/test2 values(  6,  6,  6,  6);
    
    insert into qtemp/test3 values(  1,  -1,  -1,  -1);
    insert into qtemp/test3 values(  2,  -2,  -2,  -2);
    insert into qtemp/test3 values(  3,  -3,  -3,  -3);
    insert into qtemp/test3 values(  4,  -4,  -4,  -4);
    insert into qtemp/test3 values(  5,  -5,  -5,  -5);
    insert into qtemp/test3 values(  6,  -6,  -6,  -6);
    
    update qtemp/test1 x
       set (feld2, feld3, feld4) =
           (select b.feld2, b.feld3, b.feld4
               from    qtemp/test2 a
                  join qtemp/test3 b on
                       b.feld1 = a.feld1
                   where a.feld1 = x.feld1
            );
    wenn man das in ein sorce member stellt und mit

    Code:
                          SQL-Anweisungen ausführen (RUNSQLSTM)   
                                                                  
     Auswahl eingeben und Eingabetaste drücken.                   
                                                                  
     Quellendatei . . . . . . . . . . SRCFILE      > SQL          
       Bibliothek . . . . . . . . . .              >   SD_G       
     Quellenteildatei . . . . . . . . SRCMBR       > ##TEST##     
     COMMIT-Steuerung . . . . . . . . COMMIT         *NONE        
     Benennung  . . . . . . . . . . . NAMING       > *SYS         
                                                                  
                                Zusätzliche Parameter             
                                                                  
     Datumsformat . . . . . . . . . . DATFMT       > *ISO
    ausführt, bekommt man als Protokoll

    Code:
    MSG ID  WTK  SATZ  TEXT                                               
    SQL7950   0       2  Position 1 Tabelle TEST1 in QTEMP erstellt.      
    SQL7950   0      10  Position 1 Tabelle TEST2 in QTEMP erstellt.      
    SQL7950   0      18  Position 1 Tabelle TEST3 in QTEMP erstellt.      
    SQL7956   0      25  Position 1 1 Zeilen in TEST1 in QTEMP eingefügt. 
    SQL7956   0      26  Position 1 1 Zeilen in TEST1 in QTEMP eingefügt. 
    SQL7956   0      27  Position 1 1 Zeilen in TEST1 in QTEMP eingefügt. 
    SQL7956   0      28  Position 1 1 Zeilen in TEST1 in QTEMP eingefügt. 
    SQL7956   0      29  Position 1 1 Zeilen in TEST1 in QTEMP eingefügt. 
    SQL7956   0      30  Position 1 1 Zeilen in TEST1 in QTEMP eingefügt. 
    SQL7956   0      32  Position 1 1 Zeilen in TEST2 in QTEMP eingefügt. 
    SQL7956   0      33  Position 1 1 Zeilen in TEST2 in QTEMP eingefügt. 
    SQL7956   0      34  Position 1 1 Zeilen in TEST2 in QTEMP eingefügt. 
    SQL7956   0      35  Position 1 1 Zeilen in TEST2 in QTEMP eingefügt. 
    SQL7956   0      36  Position 1 1 Zeilen in TEST2 in QTEMP eingefügt. 
    SQL7956   0      37  Position 1 1 Zeilen in TEST2 in QTEMP eingefügt. 
    SQL7956   0      39  Position 1 1 Zeilen in TEST3 in QTEMP eingefügt.     
    SQL7956   0      40  Position 1 1 Zeilen in TEST3 in QTEMP eingefügt.     
    SQL7956   0      41  Position 1 1 Zeilen in TEST3 in QTEMP eingefügt.     
    SQL7956   0      42  Position 1 1 Zeilen in TEST3 in QTEMP eingefügt.     
    SQL7956   0      43  Position 1 1 Zeilen in TEST3 in QTEMP eingefügt.     
    SQL7956   0      44  Position 1 1 Zeilen in TEST3 in QTEMP eingefügt.     
    SQL0088   0      46  Position 1 UPDATE gilt für die gesamte Tabelle.      
    SQL7957   0      46  Position 1 6 Zeilen in TEST1 in QTEMP aktualisiert.
    und ein schneller Blick in die Tabelle bestätigt das :

    Code:
    select * from qtemp/test1  
    
    ....+....1....+....2....+....3....+...
      FELD1     FELD2     FELD3     FELD4 
        1,0       1,0-      1,0-      1,0-
        2,0       2,0-      2,0-      2,0-
        3,0       3,0-      3,0-      3,0-
        4,0       4,0-      4,0-      4,0-
        5,0       5,0-      5,0-      5,0-
        6,0       6,0-      6,0-      6,0-
    ********   Datenende   ********

Similar Threads

  1. Befehl zum Konvertieren DDS in SQL
    By deni87991 in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 31-08-06, 12:05
  2. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  3. SQL Befehl?
    By mikex01 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 01-06-06, 11:55
  4. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  5. SQL Befehl zur Ermittlung der Monatsdifferenz
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 12-10-05, 09:58

Berechtigungen

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