Aktualisierung eines Datenbankfeldes

Hallo Community,

ich möchte ein Feld einer SQL-Datenbanktabelle mit Informationen eines Feldes einer anderen Tabelle updaten. In beiden Datenbanken gibt es das Feld ‚Kundennr‘, das gleich ist. Nicht jeder Kunde steht in beiden Tabellen.

Beispiel:
Tabelle 1 - Kundenstamm
Felder: Kundennr, Name, Umsatz usw.

Tabelle 2 - KundenNeueInfos
Felder: Kundennr, KummulierterUmsatz

Das Feld Umsatz in Datei 1 soll mit dem Inhalt des Feldes KummulierterUmsatz der Datei 2 upgedatet werden.

Wer kann mir hier mit einem einfachen SQL-Befehl auf die Sprünge helfen?

Gruß
Dirk

update tabelle1 set umsatz =(select kumulierterumsatz from tabelle2 tab2
where tabelle1.kundennr=tab2.KUNDENNR)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Vielen Dank, aber…
Vielen Dank!

Leider wird aber das Umsatz-Feld der Kunden auf NULL gestellt, die in der zweiten Tabelle nicht vorhanden sind.
Auf welche Weise kann man das umgehen?

Hi,
schau dir das mal an:

http://www.wer-weiss-was.de/cgi-bin/www/service.fpl?..

cu

Leider wird aber das Umsatz-Feld der Kunden auf NULL gestellt,
die in der zweiten Tabelle nicht vorhanden sind.
Auf welche Weise kann man das umgehen?

UPDATE tabelle1 
 SET umsatz =(SELECT kumulierterumsatz from tab2
 WHERE tabelle1.kundennr=tab2.kundennr
**AND tab2.kundennrNull** )

sollte eigentlich tun. Man fragt sich auf den ersten Blick, warum das so ist. Nun, es passiert folgendes : Wenn die Kundennr. aus Tabelle1 nicht gefunden wird, gibt das SQL-Statement Null für den Schlüssel tab2.kundennr zurück. Null=Haumichtot stimmt aber immer, i.e. ist Null.

Wobei zum Datenmodell anzumerken ist, dass es nicht optimal ist - Umsatz_kumuliert ist mit einiger Wahrscheinlichkeit ein berechnetes Feld; außerdem bietet sich ein LEFT JOIN beider Tabellen an …

Gruß Eillicht zu Vensre

Funktioniert leider nicht…
Der SQL-Befehl setzt leider ALLE Werte auf NULL.

Ich habe dann auch probiert statt ’ NULL’ mit ‚IS NOT NULL‘ zu arbeiten. Hier werden dann zwar die in der zweiten Datei vorhandenen Daten übernommen, bei nicht vorhandenen Kunden werden die Werte dennoch auf NULL gestellt.

Hi

Ist auch logisch:
Vergleich mit NULL liefert immer ‚UNDEFINED‘, und das wird im Zweifelsfall als False interpretiert.
Das wiederum führt dazu dass dein subselect keine Zeilen liefert.

Du könntest das gesamte subselect mit einem nvl einschließen:


set wert = nvl((select x from blah where …), wert)

Jens

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

NVL kennt mein System nicht…

Hi

Der SQL-Befehl setzt leider ALLE Werte auf NULL.

NVL scheint mein System nicht herzugeben.
‚nvl‘ is not a recognized function name

Dirk

Ui …
was ist das denn für eine DB?
NVL(a,b) liefert a wenn a nicht null ist und sonst b … vielleicht findest du ja noch eine Funktion die sowas tut.

Hast du den Ansatz in meinem ersten Posting mal ausprobiert?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich nutze MS SQL Server2000

Bei Nutzung des Links im ersten Posting bekomme ich die Meldung, dass ich mich neu einloggen soll. Tue ich das, kommt die gleiche Meldung wieder.

Dirk

Na dann zitier ich mich mal selbst:

---- aus dem Thread insert-Statement von Anja ein wenig weiter unten in diesem Forum
update (select tab1.b b_1, tab2.b b_2
from tab1, tab2
where tab1.a = tab2.a)
set b_2 = b_1

Vorraussetzung das das funktioniert ist, dass es einen unique key auf tab1.a gibt.

-------- Zitat Ende --------------------------

Danke,
aber leider funktioniert das auch nicht.

Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ‚(‘. -> Vor ‚select‘
Server: Msg 170, Level 15, State 1, Line 5
Line 5: Incorrect syntax near ‚=‘. -> in der SET-Zeile

Muster:
update (select tab1.b b_1, tab2.b b_2
from tab1, tab2
where tab1.a = tab2.a)
set b_2 = b_1

Ich glaube ich mache das nun anders. Wenn ich die Werte in einem anderen Feld zwischenspeichere kann ich dann alle die Felder, die auch gefüllt sind in einem zweiten Schritt dann an Ort und Stelle bringen.

Gruß
Dirk