[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.074

    SQL V5R4 Insert into

    Hallo *all,

    ich habe hier eine Excel-Tabelle mit Kundennr und E-Mail Adresse die ich dem Warenwirtschaftsystem zur Verfügung stellen will.
    Auch beim 1. befüllen kann es ja sein das die Datensätze schon existieren oder was auch vorkommt das die lieben Kollegen zu einen Kunden 3 unterschiedlichen E-Mail Adressen erfassen.
    Dachte ich kein Problem, machst du ein not exists und bist da wo du hin willst.

    Code:
    insert into adr04xx (a4fa, a4kto, a4edua, a4dfjn,           
    a4id1, a4afo4, a4ntjn, a4sajn, a4do10, a4mail)                     
    select '1', KD_NR00001, 'XX', 'J', KD_NR00001, '1', 'N', 'J', 'NN',
           E_MAI00001  from email3  t2                          
           where not exists (select * from adr04xx              
                             where int(a4kto) = int(t2.KD_NR00001))
    Sprich a4kto ist die Kundennummer im WWS und KD_NR00001 in der Mail Datei. Warum fällt der denn jetzt trotzdem auf die Nase wenn in der Mail-Datei die KD_NR00001 3x drinsteht?

    Grübel, Grübel


    GG

    BTW. Könnte man es in SQL auch so bauen das er wenn neu ein Insert macht und wenn Bekannt ein Update oder muß ich immer 2 SQL-Statements laufen lassen?

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... den select musst Du Dir in einer Klammer vorstellen, sprich es selektiert alle (also die mehrfach vorkommenden mehrfach) und versucht dann das einzufüllen, was nicht gelingen kann, falls da eine unique constraint das verhindert...
    Du musst die Doubletten irgendwie durch Gruppierung im Select beseitigen (bloß welche Adresse solls denn sein???).
    Für den Insert/update brauchst Du zwei Statements (sinnigerweise erst den update).

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Dec 2012
    Beiträge
    10
    Hi,
    versuchs mal mit:
    where int(a4kto) LIKE int(t2.KD_NR00001))
    heg

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.074
    Zitat Zitat von BenderD Beitrag anzeigen
    ... den select musst Du Dir in einer Klammer vorstellen, sprich es selektiert alle (also die mehrfach vorkommenden mehrfach) und versucht dann das einzufüllen, was nicht gelingen kann, falls da eine unique constraint das verhindert...
    Du musst die Doubletten irgendwie durch Gruppierung im Select beseitigen (bloß welche Adresse solls denn sein???).
    D*B
    Was macht dann eine not exists Abfrage für einen Sinn? Die A4kto ist natürlich ein eindeutiger Schlüssel.
    Welche E-Mail Adresse er nimmt wäre mir egal, da der Sachbearbeiter erst dann die Dinge ändert wenn der Kunde sich ärgert, und nicht wenn der EDV-Tuppes sich ärgert...

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... SQL ist eine Mengen-orientierte Sprache und das insert statement erlaubt eine oder auch mehrere Sätze auf einmal einzufügen. Es geht also auch:
    insert into covelenz
    values
    (1, 'Hugo', 'Hasenfuß', 'Dahier'),
    (2, 'Otto', 'Käsfuß', 'Dorten');
    Der Subselect setzt nun hier sein ResultSet ein.

    Die not exists Abfrage macht dann Sinn, wenn die Daten Sinn machen.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Aug 2006
    Beiträge
    2.074
    Aber da Birgitta und erst vor ein paar Tagen gezeigt hat wie man in SQL doppelte Sätze löscht wandern die jetzt unter leichtem rühren in den Orkus.....GG

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Wie Dieter schon schreibt, der "insert ... select" ist ein Masseninsert.
    Das Problem hierbei ist wieder, dass der "... where exists ..." vor dem 1. Insert überhaupt durchgeführt wird. D.h., wenn in der Quelle 2 Sätze sind, die beide nicht im Ziel existieren, dass eben beide kopiert werden. Bei einem UNIQUE-Key geht das natürlich in die Hose.
    Hier hilft tatsächlich nur ein Programm, dass jeden Satz einzeln per Select-Cursor und Insert kopiert.

    Wohl dem, der wieder mindestens V6 hat.
    Hier gibt's dann neu den MERGE, mit dem man einen Update/Insert machen kann.

    Alterativ kann ich dir nur mein Upload/400 als Excel-AddIn anbieten, dass genau dieses löst.
    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
    Aug 2006
    Beiträge
    2.074
    Danke für den Hinweis,
    aber ich bin schon so alt das ich lieber noch was lerne als anderer Leute Tools zu benutzen (wenns zeitlich passt) und das mit dem Masseninsert wußte ich noch nicht.

    GG

Similar Threads

  1. RPGLE Trigger before insert übernimmt neue Werte nicht
    By msost in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 07-10-14, 14:15
  2. SQL V5R4 DEC -> HEX
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 19-08-14, 14:29
  3. SQL Optimierung V5R4
    By KingofKning in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 17-05-14, 11:33
  4. V5R4
    By dino in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 18-12-13, 14:59
  5. SQL insert mit variable
    By Robi in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 21-03-03, 10:16

Berechtigungen

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