[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    1.975

    SQL Insert in schleife

    hallo *all,

    Kann ich mit SQL einen Datensatz mehrfach kopieren.
    Bsp.:
    insert into LIB/FILE_1 select Feld_a, feld_b, (select distinc(feld_x) from lib/file_2 where feld_x like '%D01'), feld_d, feld_e where ...

    Der fette Teil ist eine Liste aller einzufügenden Sätze.
    vielen Dank
    gruß
    Robi

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ein skalarer Subselect (dein fetter Teil) darf genau nur 1 Feld und 1 Zeile ergeben !
    Wenn der Subselect keine Daten findet, wird NULL geliefert. Sollte dein Zielfeld kein NULL erlauben, musst du den Subselect noch in ein coalesce(select ... , Defaultwert) einbauen, sonst stirbt der gesamte SQL ab dem 1. fehlerhaften Satz.

    Der, auf den insert folgende, Fullselect kann durchaus beliebig viele Zeilen liefern.
    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
    Aug 2001
    Beiträge
    2.873
    Hi,

    mir fehlt irgendwo eine Tabelle in Deinem SQL-Statement.
    Aber versuch mal folgendes:

    PHP-Code:
    insert into Lib/File_1                                    
           with x 
    as (Select distinct(Feld_Xfrom Lib/File_2   
                         where Feld_X like 
    '%D01')            
           
    select Feld_aFeld_bFeld_XFeld_d, ....
           
    from Lib/File_3 cross join x    
           Where 
    ........ 
    Birgitta
    Birgitta Hauser

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

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    @Fuerchau
    genau das wollte ich ja nicht, ich will ja mehrere Sätze einfügen.

    @Birgitta
    Du bist echt die größte!!
    Funktioniert !!!!
    irre, wie kommt man den auf so was !
    Wenn es deine Zeit erlaubt kannst du dazu noch kurz etwas erklähren ?

    DANKE
    echt irre
    Robi

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Hi,

    Wenn es deine Zeit erlaubt kannst du dazu noch kurz etwas erklähren ?
    was willst Du wissen?

    With x as (Select .....) ist eine Common-Table-Expression (CTE), die so etwas wie eine "temporäre View" nur für dieses eine Statement erzeugt.

    CTEs sind Bestandteil des Select-Statements und werden seit Release V4R3M0 unterstützt. Für jedes Select-Statement können mehrere CTEs, die sich auch aufeinanderbeziehen können, definiert werden. (einfach with x as (Select ), y as (Select ) ...)

    Die CTE war notwendig, wegen der Distinct-Anweisung.

    Im eigentlichen Select-Statement wird über CROSS JOIN jeder Satz dieser CTE mit jedem Satz auf FILE_3 verknüpft.

    Birgitta
    Birgitta Hauser

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

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Danke
    das mit dem CROSS JOIN war mir nicht klar, wenn ich ehrlich bin, kannte ich das garnich. Mich wunderte das ich keine verknüpfung anzugeben brauche.
    Nochmals vielen Dank
    Robi

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Cross join ist die Verknüpfung jeden Satzes von Datei A mit B. Dies entspricht übrigens auch folgendem:

    select * from filea, fileb
    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

  8. #8
    Registriert seit
    Sep 2008
    Beiträge
    3

    SQL Update

    Hallo,
    ich habe eine frage bezüglich SQL, wäre schön wenn jemanden mir dabei helfen kann.

    ich habe eine Tabelle mit vielen Dupplikaten drin, ich will eine SQL Anfrage schreiben, die mir die Duplikate sucht, und in einem bestimmten feld ein wert wie eins oder char wie 'Duplikat' schreiben. wie in eine Schleife.
    die Tabelle sieht so aus(Beispiel):

    NAME Nachname wert
    Mo Do
    Sa Fra
    Sa Fra
    Mo Do
    Al x
    Fa ca

    ich will unter die Spalte wert irgendetwas schreiben können,

    ich komme leider nicht mehr weiter, ich werde alles begrüßen, auch lösungen mit ASP bzw. ASPX

    Danke im Voraus,

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Die folgende Abfrage listet Dir alle Duplikate auf. In der 3. Spalte wird die Anzahl der Vorkommen ausgegeben

    PHP-Code:
    Select NameNachnameCount(*)
    From MyTable
    Group By Name
    Nachname
    Having count
    (*) > 
    Birgitta Hauser

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

  10. #10
    Registriert seit
    Sep 2008
    Beiträge
    3
    Vielen Dank für die schnelle Antwort, es ist mir klar mit having count(*)>1 die Dupilkat raus zu filtern, ich will gerne jetzt im Felder die widerholt vorkommen, einen Wert einfügen wie 0 oder 1 oder char.

    Vielen Dank

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    ich will gerne jetzt im Felder die widerholt vorkommen, einen Wert einfügen wie 0 oder 1 oder char
    Dazu musst Du die Duplikate zunächst ermitteln, das Ergebnis mit der Original-Datei verknüpfen und wenn Duplikat den gewünschten Wert, z.B. setzen.

    PHP-Code:
    with x as (Select NameNachname from MyTable                 
                 group by Name
    Nachname                          
                 having count
    (*) > 1)                            
    select a.*, case when x.Name is not NULL then 1 else 0 End 
    from MyTable a left outer join x using
    (NameVorname
    Birgitta
    Birgitta Hauser

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

  12. #12
    Registriert seit
    Sep 2008
    Beiträge
    3

    SQL Abfrage, Email zerlegen

    Hallo Zusammen,
    ich habe eine email Adreese, die will ich mit eine SQL Abfrage in 2 Felder speichern

    eingabe: testtt@prvider.de

    ich möchte gerne testtt in Spalte1 und provider.de in Spalte2 haben.
    kann mir jemand helfen. Vielen Dank im Voraus.

    Sam

Similar Threads

  1. SQL: Insert bei NULL
    By woki in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 31-10-06, 10:21
  2. SQL INSERT aus JOIN
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 20-01-06, 15:23
  3. SQL Insert: Zeichenbegrenzung???
    By Deficiency in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 13-01-06, 09:00
  4. SQL Insert ein Feld Hochzählen
    By linguin in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 07-01-06, 15:46
  5. SQL Insert
    By Deficiency in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 01-12-05, 11:22

Berechtigungen

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