Anmelden

View Full Version : Sql-Update



Jenne
10-01-05, 09:48
Hallo Kollegen,
ich habe mal wieder ein Problem.
Ich möchte aus einer Lieferantendatei ein Feld aus der Artikeldatei angleichen. Da ich nur die interne Artikel_nr(nicht in der Lieferantendatei vorhanden) als eindeutige ID habe. Bekomme ich bei meiner folgenden SQL Anweisung die Fehlermeldung das im Ergebnisbereich mehr als eine Zeile enthalten ist. Leider habe ich keine für mich verständliche Hilfe im Forum gefunden (Sorry !)

update xxxlib/DateiA set Feld1 = (select
DateiB.Feld2 from xxxLIB/Dateib WHERE
DateiA.MANDANT_NR = DateiB.MANDANT_NR and DateiA.LIEFERANT_NR = DateiB.LIEFERANT_NR and current timestamp between
DateiA.GUELTIG_VON and DateiA.GUELTIG_BIS and current timestamp
between DateiB.GUELTIG_VON and DateiB.GUELTIG_BIS and
DateiA.IFA_LIEFERANT_NR <> DAteiB.IFA_LIEFERANT_NR and
DateiA.IFA_LIEFERANT_nr > 0 and DateiB.IFA_LIEFERANT_NR > 0
group by DateiB.IFA_LIEFERANT_NR)

Leider funktioniert eine Union Anweisung lt. meinem Wissen nicht in einer Set Anweisung.
Für Eure Hilfe wäre ich Dankbar

Gruß
Jenne

Rincewind
10-01-05, 11:45
Hi,

eventuell mal ein STRDBG UPDPROD(*YES) vor dem STRQSL machen und dann im Joblog mal nach der Satznummer gucken.

Vielleicht ist es ja nur bei einem Lieferanten, ansonsten kann man daran eventuell eine zusätzliche Bedingung erkennen.


Gruss

Rince

Jenne
10-01-05, 11:56
Sorry Rince,

leider gibt es keine zusätzliche Verbindung. Jeder Lieferant hat mehr als 1 Artikel. Daher liegt es auch nicht an einem Lieferanten.
Das einzige was Eindeutig wäre ist die Artikel_nr in der Datei. Vielleicht funktioniert das ja mit max(DateiB.Artikel_nr) ?
Leider weiß ich nicht wo ich das einbauen könnte.

Gruß
Jenne

Fuerchau
10-01-05, 13:57
Zwischen DateiA und DateiB muss eine eindeutige Beziehung bestehen, sonst funktioniert das nicht.
Der Group by ist da nicht hilfreich, da in deiner Bezihung der Artikel keine Rolle spielt.

Wenn Feld2 auf ALLE Sätze in DateiA upgedatet werden soll, dann verwende:
select max(DateiB.Feld2) ....
Das Group by kannst du dir sparen.

Achte aber darauf, dass auch für jeden Satz in DateiA auch ein Satz in DateiB vorhanden ist.
Ist das nicht der Fall, soltest du den Update mit "where exist in (select * from DateiB where ...)" ergänzen.

Jenne
10-01-05, 15:38
Danke Herr Fuerchau und Rince,

jetzt hat es geklappt. Habe den max-Befehl richtig eingebaut.


Gruß
Jenne