[NEWSboard IBMi Forum]

Thema: SQL Statement

  1. #1
    Registriert seit
    Nov 2002
    Beiträge
    86

    Post SQL Statement

    Hallo,

    benötige Hilfe bei einem SQL Statement.

    Ich möchte ein Feld aus DateiA mit einem Feld aus DateiB updaten, Schlüssel ist FeldXY aus DateiA.

    Danke!

    Gruß,
    Mädele

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

    Post

    update DateiA set f1=(select f1 from DateiB where DateiA.Key = DateiB.Key and ...)
    where DateiA.Key in (Select DateiB.Key from DateiB)

    Liest sich kompliziert ist es aber nicht.
    Der 1. Subselect selektiert genau ein Feld, dessen Schlüssel zu DateiA passt.
    Ist jedoch kein passender Satz vorhanden, liefert der Select NULL. Ist NULL jedoch weder erlaubt, geschweige denn gewünscht, muss ich den Update per Where auf genau die vorhandenen Sätze einschränken.
    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
    Nov 2002
    Beiträge
    86

    Post

    Hallo,

    habe das Statement ausgeführt und bekomme die Fehlermeldung -Ergebnis der Anweisung enthält mehr als eine Zeile-

    update datei a set a.feld1=(select b.feld1 from datei b where a.key1 = b.key1) where a.key1 in (select b.key1 from datei b)

    ..mit where exists hab ich es auch schon versucht - gleiche Fehlermeldung.

    Was mache ich falsch?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.234

    Post

    Im 1. Subselect darf nur 1 Zeile als Ergebnis kommen, d.h., dass der Key nicht eindeutig ist !
    Für diese Form des Updates benötigst du eine EINDEUTIGE Beziehung um genau EINEN Satz zu selektieren.
    Falls das Feld Key1 nicht ausreicht mußt du halt mit "and" weitere Schlüssel auswählen.

    Frage: Ist dein Beispiel das richtige ? Es scheint, dass du den Update auf sich selbst durchführst.
    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

  5. #5
    Registriert seit
    Nov 2002
    Beiträge
    86

    Post

    Hallo,

    ich verwende als eindeutigen Schlüssel die Teilenummer, welche in beiden Dateien vorhanden ist. Jede Teilenummer kommt nur einmal in den Dateien vor.

    Grüße,
    Mädele

    [Dieser Beitrag wurde von Mädele am 27. Februar 2003 editiert.]

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.234

    Post

    Um das zu überprüfen mach erst mal einen normalen select:

    select rrn(a), a.feld1, a.key1, rrn(b), b.feld1, b.key1
    from datei a, datei b
    where a.key1=b.key1

    Mit der Funktion RRN(x) wird die Satznummer der Datei ausgegeben. Wenn die Satznummer von (b) mehrmals auftaucht hast du ein Problem (nicht eindeutig).

    Oder prüfe folgendes

    select key1, count(*) from datei
    group by key1
    having count(*)>1

    Damit bekommst du alle Schlüssel, die mehr als 1 Mal vorkommen.
    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

  7. #7
    Registriert seit
    Nov 2002
    Beiträge
    86

    Post

    Hallo,

    Du hattest Recht - doch jetzt tut sich ein neues Problem auf.
    Ich habe z.B. 2 Sätze des gleichen Schlüssels, möchte aber den aktuellsten Satz. Wie mache ich das mit SQL?


  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.234

    Post

    Den aktuellsten Satz kann man nur an Hand der Daten selbst feststellen, als z.B. Datum/Zeit, Timestamp oder Zähler.

    Ab V5 kann man im Select die Anzahl Sätze bestimmen (vorher leider nicht):

    select .... from datei a where key1=...
    and Zeit = (select max(Zeit) from datei b where a.key1 = b.key1)
    fetch first 1 row

    Ob Fetch allerdings auch im subselect funktioniert, wage ich zu bezweifeln.

    Wenn der zu selektierende Wert in allen doppelten Schlüsseln identisch ist, kannst du auch noch mit "SELECT DISTINCT ..." im Subselect arbeiten.

    Ansonsten gehts halt nur noch per Programm !
    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. Dynamisches SQL in einem CL erstellen
    By Sony in forum IBM i Hauptforum
    Antworten: 27
    Letzter Beitrag: 20-07-09, 21:48
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. SQL Statement
    By juergenkemeter in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 15-11-04, 12:15
  5. SQL Statement
    By Pia in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 18-04-02, 15:24

Berechtigungen

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