PDA

View Full Version : Datenänderung mit SQL



Eric
14-03-09, 21:32
Hallo,

ich habe folgendes Problem, in einer Datenbank stehen Kundenummer, .... und auch die Vertreternummer, es muss aus einer Tabelle (Kundennummer, neue Vertreternummer) der Kundenummer die neue Vertreternummer zugeordnet werden, alle anderen Daten müssen bleiben, wie geht das per SQL ?

dnake an alle eric

BenderD
15-03-09, 07:52
update KundenTabelle k
set k.kundenNummer = (select v.vertreternummer
from vertreter v
where v.kundenNummer = k.kundenNummer)

D*B



Hallo,

ich habe folgendes Problem, in einer Datenbank stehen Kundenummer, .... und auch die Vertreternummer, es muss aus einer Tabelle (Kundennummer, neue Vertreternummer) der Kundenummer die neue Vertreternummer zugeordnet werden, alle anderen Daten müssen bleiben, wie geht das per SQL ?

dnake an alle eric

B.Hauser
15-03-09, 09:08
update KundenTabelle k
set k.kundenNummer = (select v.vertreternummer
from vertreter v
where v.kundenNummer = k.kundenNummer)

Das setzt allerdings voraus, dass es auch zu jeder Kunden-Nr. genau eine Vertreter-Nr. gibt. Sollte nicht für jede Kunden-Nr. eine Vertreter-Nr. vorhanden sein, geht dieses Statement schief!


update KundenTabelle k
set k.KundenNummer = Coalesce((select Distinct v.VertreterNummer
from Vertreter v
where k.KundenNummer = v.VertreterNummer),
k.KundenNr)

Oder besser


update KundenTabelle k
set k.KundenNummer = (select Distinct v.VertreterNummer
from Vertreter v
where k.KundenNummer = v.VertreterNummer)
where exists (select *
from KundenTabelle C
where k.KundenNr = c.KundenNummer)

Birgitta

BenderD
15-03-09, 10:24
... schief gehen tut, wenn man mehr als eine Vertreternummer zuordnen will, deshalb sollte man logischerweise nur eine in der Zuordnungstabelle haben, was man über eine unique constraint absichern kann, das where exists hilft da nix.
Was das coalesce angeht, da kann man über besser geteilter Meinung sein und wir sind da wohl unterschiedlicher, was zuweilen vorkommt. Aus der Sicht des Datenbankdesigns handelt es sich bei der Vertreternummer um eine typische Foreign Key Beziehung und da gibt es gute Gründe null Values zuzulassen, damit man eine referential constraint einrichten kann ohne sich eine Dummy Vertreter einzurichten, oder gar bei nicht vorhanden sein des Vertreters 0 oder blank in ein Foreign Key Feld reinzuschreiben.
Was das where exists angeht, naja, da gibt die Aufgabenstellung zuwenig her, um das exakt einzuordnen, ob die entsprechende Datei komplett ist...

D*B





update KundenTabelle k
set k.kundenNummer = (select v.vertreternummer
from vertreter v
where v.kundenNummer = k.kundenNummer)

Das setzt allerdings voraus, dass es auch zu jeder Kunden-Nr. genau eine Vertreter-Nr. gibt. Sollte nicht für jede Kunden-Nr. eine Vertreter-Nr. vorhanden sein, geht dieses Statement schief!


update KundenTabelle k
set k.KundenNummer = Coalesce((select Distinct v.VertreterNummer
from Vertreter v
where k.KundenNummer = v.VertreterNummer),
k.KundenNr)

Oder besser


update KundenTabelle k
set k.KundenNummer = (select Distinct v.VertreterNummer
from Vertreter v
where k.KundenNummer = v.VertreterNummer)
where exists (select *
from KundenTabelle C
where k.KundenNr = c.KundenNummer)

Birgitta

Eric
16-03-09, 16:39
Hallo,

danke, wed das diese Woche probieren.

danke eric